Как прочитать одно значение ячейки Excel

У меня есть файл excel с листом 1, который имеет значение, которое мне нужно прочитать в строке 2 и столбце 10. Вот мой код.

Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Excel.Sheets excelSheets = excelWorkbook.Worksheets;
string currentSheet = "Sheet1";
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
var cell = (Excel.Range)excelWorksheet.Cells[10, 2];

после получения объекта ячейки, который является Excel.Диапазон, я не знаю, как читать содержимое этой ячейки. Я попытался преобразовать его в массив и цикл над ним, и я попытался преобразовать в массив строк и т. д. Я уверен, что это очень просто. Есть ли прямой способ получить только одно значение ячейки, которое является строкой?

6 ответов


вам нужно привести его к строке (а не массиву строк), так как это одно значение.

var cellValue = (string)(excelWorksheet.Cells[10, 2] as Excel.Range).Value;

using Microsoft.Office.Interop.Excel;

string path = "C:\Projects\ExcelSingleValue\Test.xlsx ";

Application excel = new Application();
Workbook wb = excel.Workbooks.Open(path);
Worksheet excelSheet = wb.ActiveSheet;

//Read the first cell
string test = excelSheet.Cells[1, 1].Value.ToString();

wb.Close();

в этом примере используется "библиотека объектов Microsoft Excel 15.0", но может быть совместима с более ранними версиями Interop и других библиотек.


 //THIS IS WORKING CODE                        
 Microsoft.Office.Interop.Excel.Range Range_Number,r2;
 Range_Number = wsheet.UsedRange.Find("smth");
 string f_number="";

 r2 = wsheet.Cells;

 int n_c = Range_Number.Column;
 int n_r = Range_Number.Row;
 var number = ((Range)r2[n_r + 1, n_c]).Value;

 f_number = (string)number;

лучше использовать .Value2 () вместо .Значение.)( Это быстрее и дает точное значение в ячейке. Для определенного типа данных усечение может наблюдаться, когда .Используется значение ().


пожалуйста, попробуйте это. Может, это тебе поможет. Это работает на меня.

string sValue = (range.Cells[_row, _column] as Microsoft.Office.Interop.Excel.Range).Value2.ToString();
//_row,_column your column & row number 
//eg: string sValue = (sheet.Cells[i + 9, 12] as Microsoft.Office.Interop.Excel.Range).Value2.ToString();
//sValue has your value

проблема с чтением одной ячейки Excel в .Net исходит из того, что пустая ячейка оценивается в Null. Таким образом, нельзя использовать .Value или .Value2 свойства, потому что появляется ошибка.

чтобы вернуть пустую строку, если ячейка составляет Null на Convert.ToString(Cell) может использоваться следующим образом:

Excel.Workbook wkb = Open(excel, filePath);
Excel.Worksheet wk = (Excel.Worksheet)excel.Worksheets.get_Item(1);

for (int i = 1; i < 5; i++)
{
    string a = Convert.ToString(wk.Cells[i, 1].Value2);
    Console.WriteLine(a);
}