Как читать значение ячейки Excel?

Поиск справки о том, как читать несколько значений ячейки из Excel. Я думал, что начну с этого.

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[1, 1];

Хотя мне не повезло. Я хочу иметь возможность читать значение ячейки и хранить ее где-нибудь, а затем проверять каждые несколько секунд значение.

3 ответа

Вы серьезно хотите взглянуть на EPPLus: http://epplus.codeplex.com/

Он доступен от NuGet для использования в ваших проектах. Это, безусловно, самый простой и понятный способ взаимодействия между С# и Excel. Это также бесплатно, кстати.

Учебное пособие: http://www.codeproject.com/Articles/680421/Create-Read-Edit-Advance-Excel-Report-in#1

private DataTable WorksheetToDataTable(ExcelWorksheet oSheet)
{
int totalRows = oSheet.Dimension.End.Row;
int totalCols = oSheet.Dimension.End.Column;
DataTable dt = new DataTable(oSheet.Name);
DataRow dr = null;
for (int i = 1; i <= totalRows; i++)
{
 if (i > 1) dr = dt.Rows.Add();
 for (int j = 1; j <= totalCols; j++)
 {
 if (i == 1)
 dt.Columns.Add(oSheet.Cells[i, j].Value.ToString());
 else
 dr[j - 1] = oSheet.Cells[i, j].Value.ToString();
 }
}
return dt;

}

Это считывает все столбцы и строки в EPPLus.


Что-то вроде:

Worksheet sheet = excelWorkbook.Worksheets["Sheet1"] as Worksheet;
Range rng = sheet.Cells[1,1] as Range;
object value = rng.Value;

... должен делать то, что вы хотите. Попробуйте это, и если вы получите какие-либо ошибки, дайте мне знать.

Значение будет либо string, либо ******, DateTime, bool или значением int.

Помимо int s, они совершенно понятны. Значения int представляют собой различные коды ошибок, которые возможны, например, #VALUE!

(Кстати, вместо ссылки на Excel PIA я бы рекомендовал использовать NetOffice, который доступен бесплатно через NuGet, для ссылки на объектную модель Excel. Преимущество в том, что вы не привязаны к определенной версии Excel при развертывании)


Вам нужно получить свойство .Value или .Value2 ячейки:

if (cell.Value2 == null)
 // cell is blank
else if(cell.Value2 is string)
 // cell is text
else if (cell.Value is ******)
 // cell is number;
else if (cell.Value2 is ******)
 // cell is date

Обратите внимание на последние два, if. .Value2 вернет ****** для обоих чисел и дат, но .Value вернет ****** только для чисел. Порядок, который вы проверяете, важен.

licensed under cc by-sa 3.0 with attribution.