如何读取使用 c# 中的宏动态生成的单元格值

本文关键字:动态 单元格 何读取 读取 | 更新日期: 2023-09-27 18:17:48

  1. 我有一个 excel 文件,其中一些单元格值使用宏动态生成。
  2. 文件也是只读的。
  3. 我必须使用 c# 代码读取这些动态生成的值。使用以下宏代码生成单元格值:

**Sub abc() Range("E5").Value = "string" Range("E6").Value = 2 End Sub**

谢谢。。。!

如何读取使用 c# 中的宏动态生成的单元格值

检查是否需要连接到已打开的 excel 文件。如果使用 excelApp.Workbooks.Open,它不会反映由宏更新的工作表数据。 相反,请尝试 BindToMoniker 方法,如下所示:

  private void btnGetXLSValue_Click(object sender, EventArgs e)
  {
        object _row = 5;
        object _column = 5;
        Excel.Application excelApp = new Excel.Application();
        excelApp.Visible = false;
        excelApp.ScreenUpdating = false;
        excelApp.DisplayAlerts = false;
        Microsoft.Office.Interop.Excel.Workbook excelWorkbook ;//= excelApp.Workbooks.Open(@"C:'July.xlsm", 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
        //Get a reference to the Workbook object by using a file moniker.
        //The xls was saved earlier with this file name.
        excelWorkbook = (Excel.Workbook)System.Runtime.InteropServices.Marshal.BindToMoniker(@"C:'July.xlsm"); 
        Microsoft.Office.Interop.Excel.Sheets excelSheets = excelWorkbook.Worksheets;
        string currentSheet = "July 2015";
        Microsoft.Office.Interop.Excel.Worksheet excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)excelSheets.get_Item(currentSheet);
        Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)excelWorksheet.UsedRange;
        string sValue = (range.Cells[_row, _column] as Microsoft.Office.Interop.Excel.Range).Value2.ToString();
        //string sValue = (range.Cells[_row, _column] as Microsoft.Office.Interop.Excel.Range).get_Value(range).ToString();
        MessageBox.Show(sValue);
    }