C# 如何解析xlsm文件而不打开它

C# 如何解析xlsm文件而不打开它,c#,C#,我对编程相当陌生,但对于C#的大部分方面,我已经找到了解决方法。但我在网上找不到太多关于这方面的信息,今天我特别的漫不经心。当我被告知无法使用数据库获取电子邮件地址时,我刚刚完成了整个程序的电子邮件部分,我不得不使用Excel文档 我需要阅读xlsm并将用户名与电子邮件进行比较,以获取当前用户的电子邮件地址。我已经有了用户名,但还没有在网上找到多少特别有助于xlsm的信息。以下是我尝试过的几个例子: 这一个将是理想的,因为我喜欢我的代码短而甜,只要可能。但是当我尝试运行它时,我得到的“根级别的

我对编程相当陌生,但对于C#的大部分方面,我已经找到了解决方法。但我在网上找不到太多关于这方面的信息,今天我特别的漫不经心。当我被告知无法使用数据库获取电子邮件地址时,我刚刚完成了整个程序的电子邮件部分,我不得不使用Excel文档

我需要阅读xlsm并将用户名与电子邮件进行比较,以获取当前用户的电子邮件地址。我已经有了用户名,但还没有在网上找到多少特别有助于xlsm的信息。以下是我尝试过的几个例子:


这一个将是理想的,因为我喜欢我的代码短而甜,只要可能。但是当我尝试运行它时,我得到的“根级别的数据无效”。第1行,位置1。“我猜这与使用XDocument有关。这就是我解析XML文件的方式,所以我可能在这里使用了错误的类,但是在xlsm上也没有找到太多内容,所以我不确定该使用什么

string[] arr = XDocument.Load(@"C:\example.xlsm").Descendants("Login name" + "Email").Select(element => element.Value).ToArray();  

这一个即使在下载OpenXMLSDKV25之后,也找不到“DocumentFormat”,并且文件名已经被使用了[const string filename],但是如果我将其更改为fileName2,那么它表示并非所有代码路径都返回值

using DocumentFormat.OpenXml.Packaging;  
using DocumentFormat.OpenXml.Spreadsheet;  
using Excel = Microsoft.Office.Interop.Excel;

    public static string GetCellValue(string fileName, string sheetName, string addressName)
    {
        const string fileName = @"C:\example.xlsm";

        // Retrieve the value in cell A1.
        string value = GetCellValue(fileName, "Sheet1", "C2");

        Console.WriteLine(value);

        // Retrieve the date value in cell A2.
        value = GetCellValue(fileName, "Sheet1", "F2");

          Console.WriteLine(DateTime.FromOADate(double.Parse(value)).ToShortDateString());
    }  

此工作簿不喜欢工作簿[“Sheet1”]-无法将带[]的索引应用于“Microsoft.Office.Interop.Excel.workbook”类型的表达式

using Excel = Microsoft.Office.Interop.Excel;

        //Excel.Application excel = new Excel.Application();
        //Excel.Workbook workbook = excel.Workbooks.Open("example.xlsm");
        //Excel.Worksheet worksheet = workbook["Sheet1"] as Excel.Worksheet;

        //string someData = (worksheet.Range["C2"] as Excel.Range).Value.ToString();

        //worksheet = null;
        //workbook.Close();
        //excel.Quit();  

任何帮助都将受到感谢

我更正了您的代码(您必须通过图纸集合访问图纸:

using Excel = Microsoft.Office.Interop.Excel;

    //Excel.Application excel = new Excel.Application();
    //Excel.Workbook workbook = excel.Workbooks.Open("example.xlsm");
    //Excel.Worksheet worksheet = workbook.Sheets["Sheet1"] as Excel.Worksheet;

    //string someData = (worksheet.Range["C2"] as Excel.Range).Value.ToString();

    //worksheet = null;
    //workbook.Close();
    //excel.Quit();  

编译器的意思是,并非
GetCellValue
中的所有路径都返回值,因为
不会从中返回值。