C# Microsoft.Office.Interop.Excel:缺少工作簿查询?

C# Microsoft.Office.Interop.Excel:缺少工作簿查询?,c#,.net,vba,excel-interop,C#,.net,Vba,Excel Interop,我编写了一些VBA,在工作簿中循环执行PowerQuery查询,并将M公式导出到单独的文件中,我有一个愚蠢的想法,就是编写一个excel加载项来完成这项工作,而不是将它粘贴到所有可能需要它的工作簿中。问题是,工作簿的queries集合在interop.excel中似乎不可用,QueryTables集合不会返回M公式。除非以编程方式在下面添加VBA并运行它,否则有人知道我如何访问工作簿的查询集合吗 For Each qry In ThisWorkbook.Queries

我编写了一些VBA,在工作簿中循环执行PowerQuery查询,并将M公式导出到单独的文件中,我有一个愚蠢的想法,就是编写一个excel加载项来完成这项工作,而不是将它粘贴到所有可能需要它的工作簿中。问题是,工作簿的queries集合在interop.excel中似乎不可用,QueryTables集合不会返回M公式。除非以编程方式在下面添加VBA并运行它,否则有人知道我如何访问工作簿的查询集合吗

        For Each qry In ThisWorkbook.Queries
            filepath = directory & qry.Name & ".txt"
            Set filestream = fso.CreateTextFile(filepath, True)
            arr = Split(qry.Formula, Chr$(10))
            For i = LBound(arr, 1) To UBound(arr, 1)
                filestream.WriteLine (arr(i))
            Next i
            filestream.Close
        Next qry
编辑:下面是c#的外观(使用Excel=Microsoft.Office.Interop.Excel)。问题是我不能在这里执行类似于foreach(wkbk.querys中的Excel.WorkbookQuery qry){}的操作


根据您的excel版本,尝试从microsoft安装interop软件包。
然后检查microsoft excel 12.0库是否在您的参考中。

此工作簿
可以很容易地成为
活动工作簿
,您可以将外接程序作为xlam编写……问题不是标识工作簿对象,而是标识工作簿的查询集合。VBA允许查询,而Iopop.Excel似乎不是问题。我只是建议您考虑使用VBA来添加您的外接程序,而不是C语言,如果它不能提供您需要的所有接口…或者尝试使用后期绑定,看看您是否可以访问查询属性:
        void Application_WorkbookAfterSave(Excel.Workbook wkbk, bool suc)
        {
            string wkbk_name = Path.GetFileNameWithoutExtension(wkbk.Name);
            string wkbk_path = wkbk.Path + "\\" + wkbk_name;
            DialogResult save_res = MessageBox.Show("Do you want to save scripts?", wkbk_name, MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            
            if(save_res == DialogResult.Yes)
            {
                if(!Directory.Exists(wkbk_path))
                {
                    Directory.CreateDirectory(wkbk_path);
                }   
            }
        }