【问题标题】:Reading an Excel 2007 cell formula value using C#使用 C# 读取 Excel 2007 单元格公式值
【发布时间】:2010-12-02 11:41:40
【问题描述】:

我有一个相当大且复杂的 Excel 2007 文件和一个带有引用另一个工作表中的单元格的公式的单元格。我已经尝试了很多方法来获取值(就像我在 Excel 本身中加载时看到的那样),但主要与尝试获取 OpenXmlPart 的子对象有关。单元格的值为 40178,但文件中没有具有这么多索引的列表。单元格中的公式是“'输入控制表'!$F$8”。我(也许很愚蠢)假设这个字符串可以直接在 OpenXML API 上使用来从该字符串引用的单元格中读取值,但我错了吗?

如果有人能告诉我如何根据公式从正确的单元格中获取值,我会非常高兴 - 到目前为止,我的工作一直基于 Microsoft(糟糕)帮助页面提供的代码:@ 987654321@

谢谢,

马特。

【问题讨论】:

    标签: c# excel-2007 formula


    【解决方案1】:

    您可能可以使用此代码来读取每个单元格的值。您可以相应地修改代码,目前此代码正在从 excel 文件中读取值并返回读取的值列表:

    先放这个:using 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();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多