我有一个相当大而复杂的Excel 2007文件和一个带有公式的单元格,该公式引用了另一个工作表中的单元格。我已经尝试了很多东西来尝试获取值(就像我在Excel中加载时可以看到的那样)但主要与尝试获取OpenXmlPart的子对象有关。单元格的值是40178,但文件中没有包含那么多索引的列表。单元格中的公式是“'输入控制表'!$ F $ 8”。我(也许是愚蠢地)假设这个字符串可以直接在OpenXML API上使用来从该字符串引用的单元格中读取值,但我错了吗?
如果有人可以告诉我如何根据公式从正确的单元格中获取值,我会非常高兴 - 到目前为止,我的工作基于Microsoft(可怕的)帮助页面提供的代码:{ {3}}
谢谢,
太
答案 0 :(得分:0)
您可以使用此代码读取每个单元格值。你可以相应地修改代码,现在这段代码正在读取excel文件中的值并返回读取的值列表:
首先把它:使用Excel = Microsoft.Office.Interop.Excel;
private List<string> GetKeywordsList(string xlsFilePath)
{
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
Excel.Range range;
string str;
int rCnt = 0;
int cCnt = 0;
List<string> keywords = new List<string>();
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Open(xlsFilePath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
range = xlWorkSheet.UsedRange;
for (rCnt = 1; rCnt <= range.Rows.Count; rCnt++)
{
for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
{
if (!(((range.Cells[rCnt, cCnt] as Excel.Range).Value2) == null))
{
if ((range.Cells[rCnt, cCnt] as Excel.Range).Value2.GetType().ToString() == "System.Double")
{
double d1 = (Double)(range.Cells[rCnt, cCnt] as Excel.Range).Value2;
str = Convert.ToString(d1);
keywords.Add(str);
}
else
{
str = (string)(range.Cells[rCnt, cCnt] as Excel.Range).Value2;
keywords.Add(str);
}
}
}
}
xlWorkBook.Close(true, null, null);
xlApp.Quit();
ReleaseObject(xlWorkSheet);
ReleaseObject(xlWorkBook);
ReleaseObject(xlApp);
return keywords;
}
private void ReleaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
}
finally
{
GC.Collect();
}
}