[moder]Перенесено из Готовых решений[/moder] nerv, Добрый День! Решение ADO класса действительно очень гениальное :hands: , однако есть одна трудность он не выгружает все данные с листа. А именно на листе 156 000 строк , а он в массив грузит лишь 65536 методом ADO.ToArray() :girl_sad: т.е. [vba]
Код
Dim ADO As New ADO Dim Arr As Variant ADO.DataSource = "d:\ÀÒÁ àâãóñò 2015_ðûáà_649.xlsm" ADO.Query ("SELECT * FROM [лист1$A:AC]")
Arr = ADO.ToArray()
[/vba] т.е. в окне отладчика "Locals" Arr(65536) - максимальное число А нужно чтобы обрабатывались данные размером хотя бы до 200 000 - 350 000 строк. ПОМОГИТЕ ПОЖАЛУЙСТА
:girl_sad: :girl_sad:
[moder]Перенесено из Готовых решений[/moder] nerv, Добрый День! Решение ADO класса действительно очень гениальное :hands: , однако есть одна трудность он не выгружает все данные с листа. А именно на листе 156 000 строк , а он в массив грузит лишь 65536 методом ADO.ToArray() :girl_sad: т.е. [vba]
Код
Dim ADO As New ADO Dim Arr As Variant ADO.DataSource = "d:\ÀÒÁ àâãóñò 2015_ðûáà_649.xlsm" ADO.Query ("SELECT * FROM [лист1$A:AC]")
Arr = ADO.ToArray()
[/vba] т.е. в окне отладчика "Locals" Arr(65536) - максимальное число А нужно чтобы обрабатывались данные размером хотя бы до 200 000 - 350 000 строк. ПОМОГИТЕ ПОЖАЛУЙСТА
nerv, ПОДСКАЖИТЕ, пожалуйста, может быть есть ещё вариант уменьшить как-то занимаемую память в целях последующей обработки получаемого массива, а то только загрузла данные в массив , а уже 4,5 Гб оперативки занято. Всего на компе 8 Гб. Но массив ещё нужно будет обработать........Помогите, пожалуйста
nerv, ПОДСКАЖИТЕ, пожалуйста, может быть есть ещё вариант уменьшить как-то занимаемую память в целях последующей обработки получаемого массива, а то только загрузла данные в массив , а уже 4,5 Гб оперативки занято. Всего на компе 8 Гб. Но массив ещё нужно будет обработать........Помогите, пожалуйста SvetaS
Michael_S, Добрый День! Подскажите, пожалуйста, как вы обрабатываете 300 000 строк?
У меня Excel 2016, памяти 8 ГБ. А все не могу найти способ обработки. 1.вариант:
Был алгоритм- обрабатывала с помощью [vba]
Код
Dim Rng_find As Range
[/vba] т.е. [vba]
Код
Dim text_word2() As Variant ReDim text_word2(0 To kki, 0 To x)- место ошибки 'Если ошибку отлавливать " On Error Resume Next If Err.Number <> 0 Then Err.Clear End If"
Dim ADO As New ADO Dim Arr As Variant ADO.DataSource = "d:\ÀÒÁ àâãóñò 2015_ðûáà_649.xlsm" ADO.Query ("SELECT * FROM [лист1$A:AC]")
Arr = ADO.ToArray()
[/vba]
т.е. в окне отладчика "Locals" Arr(65536) - максимальное число А нужно чтобы обрабатывались данные размером хотя бы до 200 000 - 350 000 строк.
3 вариант :
[vba]
Код
Dim Arr As Variant Set objConnection = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") objConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & "G:\0_ÂÎÄÍÛÉ_ÌÈÐ\ÀÒÁ\Àâãóñò\" & "\" & "ÀÒÁ àâãóñò 2015_ðûáà_649.xlsm" & ";" & _ "Extended Properties=""Excel 12.0;HDR=Yes"";" sqlStr1 = "SELECT * FROM [áàçà$B:AC]" rs.Open sqlStr1, objConnection, 3, 3
[/vba]
так не получается выгрузить в массив. Вернее нужно так выгрузить в массив, чтобы ещё осталось памяти на его обработку и на создание динамического массива, куда даные поедут после обработки
Короче, нужно чтобы заработал:
[vba]
Код
Dim text_word2() As Variant ReDim text_word2(0 To kki, 0 To x)- место ошибки 'Если ошибку отлавливать " On Error Resume Next If Err.Number <> 0 Then Err.Clear End If"
[/vba]
Заработал........
Помогите, пожалуйста...........
Michael_S, Добрый День! Подскажите, пожалуйста, как вы обрабатываете 300 000 строк?
У меня Excel 2016, памяти 8 ГБ. А все не могу найти способ обработки. 1.вариант:
Был алгоритм- обрабатывала с помощью [vba]
Код
Dim Rng_find As Range
[/vba] т.е. [vba]
Код
Dim text_word2() As Variant ReDim text_word2(0 To kki, 0 To x)- место ошибки 'Если ошибку отлавливать " On Error Resume Next If Err.Number <> 0 Then Err.Clear End If"
Dim ADO As New ADO Dim Arr As Variant ADO.DataSource = "d:\ÀÒÁ àâãóñò 2015_ðûáà_649.xlsm" ADO.Query ("SELECT * FROM [лист1$A:AC]")
Arr = ADO.ToArray()
[/vba]
т.е. в окне отладчика "Locals" Arr(65536) - максимальное число А нужно чтобы обрабатывались данные размером хотя бы до 200 000 - 350 000 строк.
3 вариант :
[vba]
Код
Dim Arr As Variant Set objConnection = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") objConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & "G:\0_ÂÎÄÍÛÉ_ÌÈÐ\ÀÒÁ\Àâãóñò\" & "\" & "ÀÒÁ àâãóñò 2015_ðûáà_649.xlsm" & ";" & _ "Extended Properties=""Excel 12.0;HDR=Yes"";" sqlStr1 = "SELECT * FROM [áàçà$B:AC]" rs.Open sqlStr1, objConnection, 3, 3
[/vba]
так не получается выгрузить в массив. Вернее нужно так выгрузить в массив, чтобы ещё осталось памяти на его обработку и на создание динамического массива, куда даные поедут после обработки
Короче, нужно чтобы заработал:
[vba]
Код
Dim text_word2() As Variant ReDim text_word2(0 To kki, 0 To x)- место ошибки 'Если ошибку отлавливать " On Error Resume Next If Err.Number <> 0 Then Err.Clear End If"
anvg, Добрый День! А как Вы обрабатываете 300 000 строк? Как Вы тестировали
Цитата
Тестировал на файле формата xlsb в Excel 2010 32bit, Win7 64bit. Файл содержал один лист на 300000 строк, 40 столбцов
? У меня операционка Win 7 64-х, Excel 2016 64-х , памяти 8 ГБ. проблемма описана подробнее http:http://www.planetaexcel.ru/forum....EN_1=2) сейчас вот 3-и варианта пробывала. А что Вы делаете? А как Вы обрабатываете 300 000 строк?[i]
anvg, Добрый День! А как Вы обрабатываете 300 000 строк? Как Вы тестировали
Цитата
Тестировал на файле формата xlsb в Excel 2010 32bit, Win7 64bit. Файл содержал один лист на 300000 строк, 40 столбцов
? У меня операционка Win 7 64-х, Excel 2016 64-х , памяти 8 ГБ. проблемма описана подробнее http:http://www.planetaexcel.ru/forum....EN_1=2) сейчас вот 3-и варианта пробывала. А что Вы делаете? А как Вы обрабатываете 300 000 строк?[i]SvetaS
АУ! КТО-ТО МОЖЕТ ПОМОЧЬ, КАК ЗАГРУЗИТЬ ДАННЫЕ В МАССИВ -300 000 СТРОК, С ЦЕЛЬЮ ИХ ПОСЛЕДУЮЩЕЙ ОБРАБОТКИ В АЛГОРИТМЕ, ТАК ЧТОБЫ ЕЩЁ ОСТАЛОСЬ ПАМЯТИ НА ОБРАБОТКУ МАССИВА И НА СОЗДАНИЕ ДИНАМИЧЕСКОГО МАССИВА. АУ! КТО-ТО МОЖЕТ ПОМОЧЬ?
ПОМОГИТЕ ПОЖАЛУЙСТА
АУ! КТО-ТО МОЖЕТ ПОМОЧЬ, КАК ЗАГРУЗИТЬ ДАННЫЕ В МАССИВ -300 000 СТРОК, С ЦЕЛЬЮ ИХ ПОСЛЕДУЮЩЕЙ ОБРАБОТКИ В АЛГОРИТМЕ, ТАК ЧТОБЫ ЕЩЁ ОСТАЛОСЬ ПАМЯТИ НА ОБРАБОТКУ МАССИВА И НА СОЗДАНИЕ ДИНАМИЧЕСКОГО МАССИВА. АУ! КТО-ТО МОЖЕТ ПОМОЧЬ?
Доброе время суток SvetaS вам уже тему на Планете закрыли. И здесь могу за "крик" наказать. Вы лучше создайте в разделе VBA тему, приложите файл с исходными данными (небольшое количество, если нужно брать их с нескольких листов, то на двух листах), опишите что вы хотите с ними сделать, и по данным файла создайте лист результат. Тогда и можно будет думать, можно ли решить задачу через ADO SQL. Пока на вскидку все ваши сообщения посвящены теме о нехватке памяти для массивов, а не тому, что и как вы хотите сделать.
Доброе время суток SvetaS вам уже тему на Планете закрыли. И здесь могу за "крик" наказать. Вы лучше создайте в разделе VBA тему, приложите файл с исходными данными (небольшое количество, если нужно брать их с нескольких листов, то на двух листах), опишите что вы хотите с ними сделать, и по данным файла создайте лист результат. Тогда и можно будет думать, можно ли решить задачу через ADO SQL. Пока на вскидку все ваши сообщения посвящены теме о нехватке памяти для массивов, а не тому, что и как вы хотите сделать.anvg
ОПИСАНИЕ ЗАДАЧИ Есть файл - пример привожу в файле "Дано " на 5 стоках, так как размер данных большой. Всего строк в файле от 150 000 до 300 000 строк. В файле, в колонке "описание товара" приводится описание различного товара через ";". необходимо: 1) строки содержащие символ ";" разложить "по строкам" вниз (по строкам, а не по столбцам, т.е. увеличив число строк в файле ) 2) количество написанное напротив описания товара в строках с ";" внести в колонку "Кол-во товара" 3) вес написанный напротив упаковки продукции в описании товара внести в отдельную колонку - например 100 гр, или 1,5 кг 4) если указано количество продаж, сделать перевод строки в кг 5) каждой строке, после разложения строк содержащих ";" , по ключевому слову присвоить группу с названием товара в отдельной колонке - чтобы можно было понять что за товар находится в описании строки группы строк выделяются по информации находящейся в описании товара: - Марки компании - Марки бренда Например, Снежный Краб, Крабыч, Своя Линия, Розумна цена, и т.д. - типа продукции например, Икра мойвы, - группы продукции 1, например Икра, Краб Палочки, и т.д. - группы продукции 2, например Морепродукты, Продукты из сурими, и т.д. - состояния продукции (кулинарной обработки) например: в масле, по корейски, по мексикански, охлаждённая, замороженная и т.д. - упаковки продукции (пластик, вакумная упаковка, пресервы, железная банка и т.д.) - количества граммов продукции - вес выделить в кг отдельно, если продукция в штуках
6) после присвоения группы - создать сводную по группам.
Всего строк до 300 000 в таблице. Время на обработку до 30 минут. Памяти 8 ГБ, win 7, Excel 2016 .Ручной вариант обработки не пройдёт.....Наименования продуктов постоянно меняются. Ассортимент меняется ежедневно. Для Любителей Баз данных - да загрузка в базы данных есть, но только после сортировки строк по группам, так как ни в Access, ни в Oracle, ни в 1С - нет такого мощного инструмента по работе со строками.
Предложения об использовании баз данных принимаются только вместе с описанием данного алгоритма обработке на языке той базы, куда будем загружать......
В ЧЁМ ПРОБЛЕММА
ошибку даёт Redim на 111 533 строках на объёме маленьком ошибку не даёт (до 100 строк и до 100 столбцов) - работает нормально......
ОШИБКУ ВЫДАЁТ, когда объявляем новый массив с количество строк увеличенным на необходимое, для разложения строк содержащих ";" место ошибки: [vba]
Код
im text_word2() As Variant ReDim text_word2(0 To kki, 0 To x)- место ошибки 'Если ошибку отлавливать " On Error Resume Next If Err.Number <> 0 Then Err.Clear End If"
[/vba] - то Excel виснит и уходит в бесконечный цикл, постоянно увеличивая занимаемую память.
ОПИСАНИЕ ЗАДАЧИ Есть файл - пример привожу в файле "Дано " на 5 стоках, так как размер данных большой. Всего строк в файле от 150 000 до 300 000 строк. В файле, в колонке "описание товара" приводится описание различного товара через ";". необходимо: 1) строки содержащие символ ";" разложить "по строкам" вниз (по строкам, а не по столбцам, т.е. увеличив число строк в файле ) 2) количество написанное напротив описания товара в строках с ";" внести в колонку "Кол-во товара" 3) вес написанный напротив упаковки продукции в описании товара внести в отдельную колонку - например 100 гр, или 1,5 кг 4) если указано количество продаж, сделать перевод строки в кг 5) каждой строке, после разложения строк содержащих ";" , по ключевому слову присвоить группу с названием товара в отдельной колонке - чтобы можно было понять что за товар находится в описании строки группы строк выделяются по информации находящейся в описании товара: - Марки компании - Марки бренда Например, Снежный Краб, Крабыч, Своя Линия, Розумна цена, и т.д. - типа продукции например, Икра мойвы, - группы продукции 1, например Икра, Краб Палочки, и т.д. - группы продукции 2, например Морепродукты, Продукты из сурими, и т.д. - состояния продукции (кулинарной обработки) например: в масле, по корейски, по мексикански, охлаждённая, замороженная и т.д. - упаковки продукции (пластик, вакумная упаковка, пресервы, железная банка и т.д.) - количества граммов продукции - вес выделить в кг отдельно, если продукция в штуках
6) после присвоения группы - создать сводную по группам.
Всего строк до 300 000 в таблице. Время на обработку до 30 минут. Памяти 8 ГБ, win 7, Excel 2016 .Ручной вариант обработки не пройдёт.....Наименования продуктов постоянно меняются. Ассортимент меняется ежедневно. Для Любителей Баз данных - да загрузка в базы данных есть, но только после сортировки строк по группам, так как ни в Access, ни в Oracle, ни в 1С - нет такого мощного инструмента по работе со строками.
Предложения об использовании баз данных принимаются только вместе с описанием данного алгоритма обработке на языке той базы, куда будем загружать......
В ЧЁМ ПРОБЛЕММА
ошибку даёт Redim на 111 533 строках на объёме маленьком ошибку не даёт (до 100 строк и до 100 столбцов) - работает нормально......
ОШИБКУ ВЫДАЁТ, когда объявляем новый массив с количество строк увеличенным на необходимое, для разложения строк содержащих ";" место ошибки: [vba]
Код
im text_word2() As Variant ReDim text_word2(0 To kki, 0 To x)- место ошибки 'Если ошибку отлавливать " On Error Resume Next If Err.Number <> 0 Then Err.Clear End If"
[/vba] - то Excel виснит и уходит в бесконечный цикл, постоянно увеличивая занимаемую память.SvetaS
Dim n As Long Dim nn As Long Dim il As Long Dim find As String Dim k, kk, ii, i, j, jj, l, ll, jjj, i1, i2, kkk, j1, j2, j3, i3, jj3, eqmax As Long Dim ii_find As Long Dim jj_find As Long Dim ii_text As Long Dim jj_text As Long Dim ii_text_ost As Long Dim jj_text_ost As Long Dim txt As String Dim txt2 As String Dim txt_p As String Dim txt_col As String Dim txt_row As String Dim txt_out As String
Dim Rng_find As Range Dim Rng_find1 As Range Dim Rng_text As Range Dim Rng_substitution As Range Dim Rng_out As Range Dim theRange_out As Range Dim Delimiter As String Dim s_percent As Double
Dim Find_word() As String Dim Find_word2() As String Dim text_word1() As String Dim text_word2() As Variant Dim text_word3() As String
On Error Resume Next Set Rng_find = Range(RefEdit1.Value)
Set Rng_text = Range(RefEdit2.Value) Set Rng_substitution = Range(RefEdit3.Value) Set Rng_out = Range(RefEdit4.Value) Delimiter = Me.TextBox1 s_percent = CDbl((Me.TextBox4.Value))
On Error GoTo 0 If Rng_find Is Nothing Then MsgBox "вы не выбрали диапазон какие данные ищем" Err.Clear Else If Rng_text Is Nothing Then MsgBox "вы не выбрали диапазон в котором ищем данные " Err.Clear Else
If Rng_out Is Nothing Then MsgBox "вы не выбрали диапазон куда выводить данные" Err.Clear Else
Application.ScreenUpdating = False On Error Resume Next: Err.Clear
'раскладываем по словам искомый диапазон ii_find = myWord(Rng_find).imyRows jj_find = myWord(Rng_find).imyColumns
ReDim Find_word(1 To ii_find, 0 To jj_find) ' 0-вой столбец фраза целиком Find_word = myWord(Rng_find).iFindword
' переводим в массив 2-ух строк ' 0 строка фраза целиком ' 1 строка разложение по словам ReDim Find_word2(0 To 2, 0 To (jj_find * ii_find)) ' jjj = 1
For i = 1 To ii_find For j = 1 To jj_find If ((Find_word(i, j) <> "") And (Find_word(i, j) <> " ") And (Find_word(i, j) <> Empty)) Then Find_word2(0, jjj) = Find_word(i, 0) Find_word2(1, jjj) = Find_word(i, j) jjj = jjj + 1 End If Next j Next i
'раскладываем по словам диапазон в котором ищем ii_text = myWord(Rng_text).imyRows jj_text = myWord(Rng_text).imyColumns ReDim text_word1(1 To ii_text, 0 To jj_text) ' 0-вой столбец фраза целиком text_word1 = myWord(Rng_text).iFindword '______________
'перед тем как сравнивать 2-ва массива и класть их в третий разбиваем их
Dim coll_text_word As Collection_: Set coll_text_word = SplitArrayAll(text_word1, ii_find, jj_find, CLng(TextBox3.Text))
Dim coll_Find_word As Collection_: Set coll_Find_word = SplitArrayAll(Find_word, ii_find, jj_find, CLng(TextBox2.Text)) Dim arr_Find_word() As Variant Dim arr_text_word1() As Variant Dim my_row As Long
ActiveWorkbook.Sheets(txt_p).Range(txt_out).Clear Set theRange_out = ActiveWorkbook.Sheets(txt_p).Range(txt_out) theRange_out = text_word3 my_row = ii_text_ost 'шаг вывода ( считаем коородинаты выведения каждой части ) Next j Next i
'динамический расчёт вставляемого массива от заданной ячейки полбзователем
End If End If End If
Application.ScreenUpdating = True
[/vba]
обновлённый код
[vba]
Код
Dim n As Long Dim nn As Long Dim il As Long Dim find As String Dim k, kk, ii, i, j, jj, l, ll, jjj, i1, i2, kkk, j1, j2, j3, i3, jj3, eqmax As Long Dim ii_find As Long Dim jj_find As Long Dim ii_text As Long Dim jj_text As Long Dim ii_text_ost As Long Dim jj_text_ost As Long Dim txt As String Dim txt2 As String Dim txt_p As String Dim txt_col As String Dim txt_row As String Dim txt_out As String
Dim Rng_find As Range Dim Rng_find1 As Range Dim Rng_text As Range Dim Rng_substitution As Range Dim Rng_out As Range Dim theRange_out As Range Dim Delimiter As String Dim s_percent As Double
Dim Find_word() As String Dim Find_word2() As String Dim text_word1() As String Dim text_word2() As Variant Dim text_word3() As String
On Error Resume Next Set Rng_find = Range(RefEdit1.Value)
Set Rng_text = Range(RefEdit2.Value) Set Rng_substitution = Range(RefEdit3.Value) Set Rng_out = Range(RefEdit4.Value) Delimiter = Me.TextBox1 s_percent = CDbl((Me.TextBox4.Value))
On Error GoTo 0 If Rng_find Is Nothing Then MsgBox "вы не выбрали диапазон какие данные ищем" Err.Clear Else If Rng_text Is Nothing Then MsgBox "вы не выбрали диапазон в котором ищем данные " Err.Clear Else
If Rng_out Is Nothing Then MsgBox "вы не выбрали диапазон куда выводить данные" Err.Clear Else
Application.ScreenUpdating = False On Error Resume Next: Err.Clear
'раскладываем по словам искомый диапазон ii_find = myWord(Rng_find).imyRows jj_find = myWord(Rng_find).imyColumns
ReDim Find_word(1 To ii_find, 0 To jj_find) ' 0-вой столбец фраза целиком Find_word = myWord(Rng_find).iFindword
' переводим в массив 2-ух строк ' 0 строка фраза целиком ' 1 строка разложение по словам ReDim Find_word2(0 To 2, 0 To (jj_find * ii_find)) ' jjj = 1
For i = 1 To ii_find For j = 1 To jj_find If ((Find_word(i, j) <> "") And (Find_word(i, j) <> " ") And (Find_word(i, j) <> Empty)) Then Find_word2(0, jjj) = Find_word(i, 0) Find_word2(1, jjj) = Find_word(i, j) jjj = jjj + 1 End If Next j Next i
'раскладываем по словам диапазон в котором ищем ii_text = myWord(Rng_text).imyRows jj_text = myWord(Rng_text).imyColumns ReDim text_word1(1 To ii_text, 0 To jj_text) ' 0-вой столбец фраза целиком text_word1 = myWord(Rng_text).iFindword '______________
'перед тем как сравнивать 2-ва массива и класть их в третий разбиваем их
Dim coll_text_word As Collection_: Set coll_text_word = SplitArrayAll(text_word1, ii_find, jj_find, CLng(TextBox3.Text))
Dim coll_Find_word As Collection_: Set coll_Find_word = SplitArrayAll(Find_word, ii_find, jj_find, CLng(TextBox2.Text)) Dim arr_Find_word() As Variant Dim arr_text_word1() As Variant Dim my_row As Long
ActiveWorkbook.Sheets(txt_p).Range(txt_out).Clear Set theRange_out = ActiveWorkbook.Sheets(txt_p).Range(txt_out) theRange_out = text_word3 my_row = ii_text_ost 'шаг вывода ( считаем коородинаты выведения каждой части ) Next j Next i
'динамический расчёт вставляемого массива от заданной ячейки полбзователем
функции SplitArrayAll,SplitArray взята на сайте EducatedFool , для разбивки по коллекциям для отработки массива частями, согласно рекомендациям The_Prist
функции SplitArrayAll,SplitArray взята на сайте EducatedFool , для разбивки по коллекциям для отработки массива частями, согласно рекомендациям The_PristSvetaS
Так как вопрос вышел за рамки Готового решения по теме "ADO - класс для работы с данными Excel при помощи SQL", переношу его в отдельную тему в раздел ВОПРОСЫ ПО VBA
Так как вопрос вышел за рамки Готового решения по теме "ADO - класс для работы с данными Excel при помощи SQL", переношу его в отдельную тему в раздел ВОПРОСЫ ПО VBAPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
У меня виснет excel, когда доходит до 1,6г памяти, хотя её стоит 8. А вот и мсдн
Цитата
Для 64-разрядной версии Excel 2010 не действует ограничение в 2 ГБ ОЗУ, которое распространяется на 32-разрядные приложения. Таким образом, пользователи 64-разрядной версии Excel 2010 могут создавать книги большего размера. 64-разрядная версия Windows поддерживает больший объем адресуемой памяти, что в полной мере используется 64-разрядной версией Excel. Например, пользователи могут заполнять сетку большим объемом данных по сравнению с предыдущими версиями Excel. При увеличении объемов ОЗУ компьютера приложение Excel может использовать эту дополнительную память для работы со значительно более крупными книгами и масштабирования доступного объема ОЗУ.
У меня виснет excel, когда доходит до 1,6г памяти, хотя её стоит 8. А вот и мсдн
Цитата
Для 64-разрядной версии Excel 2010 не действует ограничение в 2 ГБ ОЗУ, которое распространяется на 32-разрядные приложения. Таким образом, пользователи 64-разрядной версии Excel 2010 могут создавать книги большего размера. 64-разрядная версия Windows поддерживает больший объем адресуемой памяти, что в полной мере используется 64-разрядной версией Excel. Например, пользователи могут заполнять сетку большим объемом данных по сравнению с предыдущими версиями Excel. При увеличении объемов ОЗУ компьютера приложение Excel может использовать эту дополнительную память для работы со значительно более крупными книгами и масштабирования доступного объема ОЗУ.
Для Любителей Баз данных Предложения об использовании баз данных принимаются только вместе с описанием
Как бы делал я. Используем MSSQL,созданм в нем пару процедур. В файле Excel макросом производим предварительную пакетную обработку,инсертим в базу пакетами-увеличивает скорость обработки. Запускаем процедуры,они делают свою работу,последняя из них возвращает сводную таблицу. Были 3 таблицы по 2-4 млн записей,делал выборку в сводную из них за 13 минут. Сервер кушал 500 метров оперативки.
Для Любителей Баз данных Предложения об использовании баз данных принимаются только вместе с описанием
Как бы делал я. Используем MSSQL,созданм в нем пару процедур. В файле Excel макросом производим предварительную пакетную обработку,инсертим в базу пакетами-увеличивает скорость обработки. Запускаем процедуры,они делают свою работу,последняя из них возвращает сводную таблицу. Были 3 таблицы по 2-4 млн записей,делал выборку в сводную из них за 13 минут. Сервер кушал 500 метров оперативки.doober
Сообщение отредактировал doober - Понедельник, 14.09.2015, 22:55
doober, ВЫГЛЯДИТ КЛАССНО , только непонятно. Какую
Цитата
В файле Excel макросом производим предварительную пакетную обработку
? КАК
Цитата
инсертим в базу пакетами
? Здесь весь вопрос какую обработку может тянуть Excel? И какую обработку делаем в базе (какие текстовые функции может использовать язык базы......)?
doober, ВЫГЛЯДИТ КЛАССНО , только непонятно. Какую
Цитата
В файле Excel макросом производим предварительную пакетную обработку
? КАК
Цитата
инсертим в базу пакетами
? Здесь весь вопрос какую обработку может тянуть Excel? И какую обработку делаем в базе (какие текстовые функции может использовать язык базы......)? SvetaS
Вот решение по 1-му пункту: сделано так: Повторение всех столбцов на количество ; в 16-м столбце, и запись результата в CSV Быстрый просчет к-ва строк в итоговом CSV- отсюда Загрузка данных в массив Выгрузка массива на лист
Проверьте на реальных данных. У меня 100 000 отработало за пару минут. Последние два пункта - при большом количестве строк могут быть недоступны - у меня из 100 000 стало 1,2млн, поэтому я бы делал подключение к CSV, поскольку у Вас 2013-й офис - Вам это трудности не составит.
По поводу добавления информации из др. пунктов Предлагаю использовать возможности PowerPivot - будет удобнее, и практичнее.
Если вы имеете в виду брать файлы меньшего размера и делить сами файлы- то это исключенно изначально, так как иначе сводная не получится........
здесь не согласен у меня в примере идет дозапись данных в CSV файл - в конец файла, т.е. если обработать например 30 файлов отдельно с такой дозаписью - потом не составит труда составить сводную на основе такого CSV файла
Вот решение по 1-му пункту: сделано так: Повторение всех столбцов на количество ; в 16-м столбце, и запись результата в CSV Быстрый просчет к-ва строк в итоговом CSV- отсюда Загрузка данных в массив Выгрузка массива на лист
Проверьте на реальных данных. У меня 100 000 отработало за пару минут. Последние два пункта - при большом количестве строк могут быть недоступны - у меня из 100 000 стало 1,2млн, поэтому я бы делал подключение к CSV, поскольку у Вас 2013-й офис - Вам это трудности не составит.
По поводу добавления информации из др. пунктов Предлагаю использовать возможности PowerPivot - будет удобнее, и практичнее.
Если вы имеете в виду брать файлы меньшего размера и делить сами файлы- то это исключенно изначально, так как иначе сводная не получится........
здесь не согласен у меня в примере идет дозапись данных в CSV файл - в конец файла, т.е. если обработать например 30 файлов отдельно с такой дозаписью - потом не составит труда составить сводную на основе такого CSV файла SLAVICK