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

У меня есть файл Excel с sheet1, который имеет значение, которое мне нужно прочитать в строке 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.Range я не знаю, как читать содержимое этой ячейки. Я попытался преобразовать его в массив и зациклить его, и я попытался преобразовать в массив строк и т. Д. Я уверен, что это очень просто. Есть ли прямой способ получить только одно значение ячейки, которое является строкой?

9 ответов

Решение

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

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() вместо.Value(). Это быстрее и дает точное значение в ячейке. Для определенного типа данных можно использовать усечение при использовании.Value().

У вас есть два способа получить значение

      using xl = Microsoft.Office.Interop.Excel;

// 1. Using Cells with numbered reference
string cellValue = (excelWorksheet.Cells[10, 2] as xl.Range).Text.ToString();

// 2. Using Range with address reference
string cellValue = excelWorksheet.Range["J2"].Text.ToString();

Пожалуйста, попробуйте это. Может быть, это может помочь вам. Меня устраивает.

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);
}

Вы можете столкнуться с проблемой при чтении значений ячеек из Excel Worksheet. Если ячейка пуста .Value (или же .Value2) выкину. Если вы хотите устранить эту проблему, вам нужно проверить, является ли результат null. что-то вроде этого:

      string strcelltext = Convert.ToString(mySheet.get_Range("A1", "A1").Value2) ?? "";

Вот решение, которое может работать лучше, если вы ссылаетесь на objWorksheet.UsedRange.

Excel.Worksheet mySheet = ...(load a workbook, etc);
Excel.Range myRange = mySheet.UsedRange;
var values = (myRange.Value as Object[,]);
int rowNumber = 3, columnNumber = 5;
string cellValue = Convert.ToString(values[rowNumber, columnNumber]);
Другие вопросы по тегам