Необходимо скопировать все данные из книги 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()) { }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д