Считывается только часть ячеек excel interop, остальные null

144
30 января 2020, 17:40

При попытке считать все ячейки документа Excel с помощью библиотеки Interop, часть ячеек считывается корректно, часть(большая) не считывается вовсе, и в итоге отображается как null. Использование Text, Value2 результата не меняет.

var lastCell = excelworksheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell);
            int lastColumn = (int)lastCell.Column;//!сохраним непосредственно требующееся в дальнейшем
            int lastRow = (int)lastCell.Row;
            string[,] list = new string[lastCell.Column, lastCell.Row]; // массив значений с листа равен по размеру листу
            for (int k = 0; k < (int)lastCell.Column; k++) //по всем колонкам
                for (int j = 0; j < (int)lastCell.Row; j++)
                { // по всем строкам
                    list[i, j] = (excelworksheet.Cells[j + 1, i + 1] as Excel.Range).Value;//считываем текст в строку
                }
Answer 1

Попробуй сделать так:

        public DataModel GetDataFromExcelFile(string filePath, int startRow, int startColumn, int endColumn)
      {
        Excel.Workbook wb = null;
        Excel.Application excel = null;
        Excel.Worksheet xlSheets = null;
        try
        {
            excel = new Excel.Application();
            wb = excel.Workbooks.Open(filePath);
            xlSheets = wb.ActiveSheet;
            Excel.Range range = xlSheets.UsedRange;
            int rowsCount = range.Rows.Count;
            var startCell = (Excel.Range)xlSheets.Cells[startRow, startColumn];
            var endCell = new object();
            endCell = (Excel.Range)xlSheets.Cells[rowsCount, endColumn];
            var writeRange = xlSheets.get_Range(startCell, endCell);
            var data = writeRange.get_Value();
            var dataModel = new DataModel
            {
                RowCount = rowsCount,
                Data = data
            };
            return dataModel;
        }
        catch (Exception ex)
        {
            return null;
        }
        finally
        {
            wb?.Close(false, filePath);
            if (xlSheets != null)
                Marshal.ReleaseComObject(xlSheets);
            if (excel != null)
                Marshal.ReleaseComObject(excel);
            if (wb != null)
                Marshal.ReleaseComObject(wb);
        }
      }
READ ALSO
Почему C# так генерирует исключения?

Почему C# так генерирует исключения?

Я буду именовать блоки когда по номеру, который они выводятКак я понимаю, в блоке '2', мы явно не указываем тип исключения, то есть результат...

136
Как правильно использовать entity framework?

Как правильно использовать entity framework?

Как правильно использовать entity framework? Нужно создавать DbContext для каждого вызова, или создать один раз и использовать всё время жизни приложения?

177
Вычисление возраста [закрыт]

Вычисление возраста [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском»

155
Строка подключения MS SQL Server в локальной сети

Строка подключения MS SQL Server в локальной сети

Как должна выглядеть строка подключения к MS SQL Server 2008 при условии, что экземпляр MS SQL Server установлен на одном из удалённых компьютеров, расположенных...

153