Необходимо скопировать все данные из книги Excel в строковую переменную - C#
Формулировка задачи:
Есть одна проблема.
Необходимо скопировать все данные из книги Excel в строковую переменную - в общем, так надо
Для работы используется
using Microsoft.Office.Interop.Excel;
код, где приложение подключается и считывает данные следующий:
Проблема, собственно, вот в чем: этот код отлично работает, но... когда в книге 20 Листов и в каждом 65 тыс заполненных строк, то копирование данных может занять часы.
Может, кто-нибудь подскажет более быстрый способ извлечения данных из Excel!
// создаем обьекты параметров для вызова методов библиотеки Excel
//обьект пустого значения
Object wMissing = System.Reflection.Missing.Value;
//обьекты true и false
Object wTrue = true;
Object wFalse = false;
Object PassWord = "12345"; //это на тот случай если есть пароль...обрабатываем если надо ошибку в исключениях
//создаем обьект приложения Excel
ExApp = new Microsoft.Office.Interop.Excel.Application();
//делаем приложение невидимым
ExApp.Visible = false;
//отключаем обновление и другие мешающие быстроте параметры
ExApp.ScreenUpdating = false;
ExApp.ErrorCheckingOptions.BackgroundChecking = false;
ExApp.ErrorCheckingOptions.NumberAsText = false;
ExApp.ErrorCheckingOptions.InconsistentFormula = false;
//открываем наше приложение Excel
ExBook = ExApp.Workbooks.Open(docPath /*путь к ексельному файлу*/,
wFalse,
wTrue,
wMissing,
PassWord,
wMissing,
wTrue,
wMissing,
wMissing,
wFalse,
wMissing,
wMissing,
wMissing,
wMissing,
wMissing);
ExApp.Calculation = XlCalculation.xlCalculationManual;//отключаем автоматическоре вычисление формул
//бежим по всем Листам
for (int sheetNum = 1; sheetNum < ExBook.Sheets.Count + 1; sheetNum++)
{
Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)ExBook.Sheets[sheetNum];
//определеяем диапазон заполненных ячеек (кто не знает, если нажимаете Ctrl+A, то выделяются все заполненные ячейки, так вот код ниже его аналог )
Range excelRange = sheet.UsedRange;
if (excelRange.Columns.Count > 0)
{
//тут считываем данные с Листа
object[,] valueArray = (object[,])excelRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);
if (valueArray != null)
{
for (int R = valueArray.GetLowerBound(0); R <= valueArray.GetUpperBound(0); R++)
for (int C = valueArray.GetLowerBound(1); C <= valueArray.GetUpperBound(1); C++)
if (valueArray[R, C] != null)
ExcelText += valueArray[R, C].ToString() + " ";
}
}
}
//чистим
ExBook.Close(wFalse, docPath, null);
Marshal.ReleaseComObject(ExBook);
ExApp.DisplayAlerts = false;
ExApp.Workbooks.Close();
ExApp.Quit();
ExApp = null;
GC.GetTotalMemory(true);Решение задачи: «Необходимо скопировать все данные из книги Excel в строковую переменную»
textual
Листинг программы
switch (value.GetType())
{
}