VB.NET - OleDbException, говорящая, что электронная таблица заполнена при вставке в электронную таблицу Excel - PullRequest
1 голос
/ 11 ноября 2011

У меня есть программа VB.Net, которая читает плоский файл, а затем анализирует строку за строкой, форматируя данные в разные электронные таблицы в книге Excel (каждая строка может содержать более 10 различных типов записей, поэтому я анализирую и помещаю в соответствующем листе Excel).

Для плоских файлов меньшего размера (до 10 МБ) парсер работает отлично. Тем не менее, я пытаюсь это на файл, который превышает 120 МБ (400 КБ + строк). Во время работы я получу OleDBException, сообщающее, что электронная таблица заполнена. Теперь я уверен, что Excel может обрабатывать гораздо больший набор данных, чем обычный файл. Поэтому я предполагаю, что это исключение не дает мне правдивую историю о том, что действительно происходит.

Я открываю соединение, а затем анализирую каждую строку в файле, вставляя каждую строку в файл Excel. Я предположил, что было бы плохо с точки зрения производительности открывать / закрывать соединение между каждой вставкой. Может ли это быть причиной проблемы? Любые идеи, что мне нужно сделать, чтобы обработать такой большой файл? В некоторых случаях размер файла может превышать 500 МБ.

Чтобы сделать вставку в Excel, я просто делаю следующее (я создаю SQL-запрос на основе типа строки и проанализированных значений):
Dim conn As New OleDbConnection()
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExportLocation.Text + "\" + importFileName + "-PVF.xls;Extended Properties=""Excel 8.0;HDR=YES"""
conn.Open() 1010 *
*

Dim cmd1 As New OleDbCommand()
cmd1.Connection = conn

... код парсера ...

cmd1.CommandText = "INSERT INTO " + rowType + " values (" + currentRowString + ")"
cmd1.ExecuteNonQuery()

1 Ответ

3 голосов
/ 11 ноября 2011

Excel 8.0 - это то же самое, что и Excel 97, который допускает максимум 65 536 строк.Вы превышаете это.

...