Все,
Я работаю над приложением, которое позволяет авторизованным пользователям загружать электронные таблицы Excel на наш сервер.
После того, как они загружены, есть классический сценарий ASP, который считывает данные в электронной таблице Excel, выполняет ряд проверок, синтаксический анализ и манипуляции, а затем записывает измененные данные в текстовый файл с разделителями табуляцией.
Затем он запускает хранимую процедуру в SQL Server, которая использует «массовую вставку» для загрузки данных в базу данных.
Весь процесс работает достаточно хорошо, когда файлы небольшие. Но по мере того, как они становятся больше (15 000+ строк, 5+ МБ), скрипт начинает выполняться очень долго (60+ секунд).
Итак, я ищу способы сделать его более эффективным/быстрым/надежным.
Примерно вот как выглядит код сейчас:
'' # read the uploaded Excel file
set objConnection = Server.CreateObject("ADODB.Connection")
objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & xlsfile & ";Extended Properties=""Excel 8.0;"""
set objRS = objConnection.execute("Select * from [Sheet1$]")
rows = ""
while (not objRS.EOF and Err.Number = 0)
row = objRS("col1") & vbTab & objRS("col2") & vbTab ... objRS("coln") & vbCrLF
rows = rows & row
objRS.MoveNext
wend
objRS.close
'' # Write the file
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(txtFile, 2, true)
objFile.WriteLine rows
objFile.Close
set objFSO = nothing
set objFile = nothing
Как видите, весь файл считывается в переменную с именем rows, а затем выгружается в текстовый файл.
Есть ли лучшие альтернативы этому? Например, должен ли я писать текстовый файл построчно, когда я читаю его из Excel?
Я рассматривал еще одну возможность - чтение файла Excel во временную таблицу в SQL Server и выполнение там всех проверок/манипуляций. Единственная проблема заключается в том, что я не могу найти эквивалент «Массовой вставки» — я думаю, что мне, возможно, придется читать данные построчно в Excel, а затем записывать их построчно в таблицу Temp в SQL Server.
Заранее большое спасибо за любой совет и понимание!