【问题标题】:Removing queries from Excel workbook usng C# Excel Interop使用 C# Excel Interop 从 Excel 工作簿中删除查询
【发布时间】:2019-01-25 16:22:26
【问题描述】:

我有一个编辑 Excel 工作簿的 C# 应用程序。其中一个过程涉及从工作簿中删除 Excel 查询连接。

 foreach (WorkbookConnection conn in ExcelWorkbook.Connections)
                             conn.Delete();

以上代码删除了连接,但查询定义仍保留在工作簿中。有没有办法完全断开表与查询的连接(同时将实际表保留在工作簿中)?

这个 VBA 代码完全符合我的要求:

Workbook.Queries(i).Delete

但我似乎找不到任何使用 C# Interop 的等效项。

*编辑:

这是我最新的代码(改编自 Mikev 在下面的答案中的代码 - 仍然无法正常工作):

        Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
        Workbook ExcelWorkbook = ExcelApp.Workbooks.Open(@"MyWorkbook.xlsx");
        ExcelApp.Visible = true;

        for (int i = 1; i <= ExcelWorkbook.Sheets.Count; i++)
        {
            Worksheet sheet = (Worksheet)ExcelWorkbook.Sheets.get_Item(i);
            if (sheet.ListObjects.Count > 0)
            {
                foreach (ListObject obj in sheet.ListObjects)
                {
                    obj.QueryTable.Delete();
                }
            }
        }

【问题讨论】:

  • 我认为您只需要复制表格并粘贴特殊值即可。工作表中有一个隐藏的查询。我通常选择整个工作表并进行复制和粘贴。

标签: c# excel-interop


【解决方案1】:
for (int i = 1; i <= workbook.Sheets.Count; i++)
{
    sheet = (Worksheet)workbook.Sheets.get_Item(i);   
    if (sheet.ListObjects.Count > 0)
    {
       foreach (ListObject obj in sheet.ListObjects)
       {
          obj.QueryTable.Delete();
       }
    }
}

致谢:here!

【讨论】:

  • 很遗憾,这似乎不起作用 - 查询仍在工作簿中。
  • 我从来没有注意到创建查询会自动创建一个表(ListObject)。这应该是公认的答案。它将保留现有数据并删除查询。此外,请确保在删除连接之前完成此操作,以确保数据是最新的。
  • 你是在循环这段代码之前的工作表吗?我现在就编辑代码
  • 我确实尝试通过循环运行它 - 查询仍然存在。
  • Mikev,我将其添加到问题中。非常感谢您的帮助。
【解决方案2】:

查询在 Workbook 对象中

foreach (var q in ExcelWorkbook.Queries)
    q.Delete();

【讨论】:

  • 嗨,@Fabulous,您能否扩展您的问题,以便更清楚地了解它在做什么以及它如何与所提出的问题相对应?
猜你喜欢
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-14
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多