При попытке считать все ячейки документа 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;//считываем текст в строку
}
Попробуй сделать так:
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);
}
}
Продвижение своими сайтами как стратегия роста и независимости