寻求有关如何从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];
虽然我没有运气。我希望能够读取单元格的值并将其存储在某处,然后每隔几秒检查一次该值。
答案 0 :(得分:1)
你真的想看看EPPLus: http://epplus.codeplex.com/
NuGet可以在项目中使用它。到目前为止,它是C#和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中的所有列和行。
答案 1 :(得分:0)
类似的东西:
Worksheet sheet = excelWorkbook.Worksheets["Sheet1"] as Worksheet;
Range rng = sheet.Cells[1,1] as Range;
object value = rng.Value;
......应该做你想做的事。试试这个,如果你有任何错误,请告诉我。
该值可以是string
,double
,DateTime
,bool
或int
值。
除了int
之外,这些都是不言自明的。 int
值表示可能的不同错误代码,例如#VALUE!
(顺便说一句,我建议使用可通过NuGet免费获得的NetOffice来引用Excel对象模型,而不是引用Excel PIA。优点是您在部署时不依赖于特定版本的Excel)
答案 2 :(得分:0)
您需要检索单元格的.Value
或.Value2
属性:
if (cell.Value2 == null)
// cell is blank
else if(cell.Value2 is string)
// cell is text
else if (cell.Value is double)
// cell is number;
else if (cell.Value2 is double)
// cell is date
注意最后两个if
。 .Value2
将为数字和日期返回一个双精度数,但.Value
将仅为数字返回一个双精度数。您检查的顺序很重要。