【问题标题】:Worksheet.SaveAs Method Saves All SheetsWorksheet.SaveAs 方法保存所有工作表
【发布时间】:2014-09-04 21:25:56
【问题描述】:

使用 C# 编写从工作簿中取出单个工作表并将其保存为 HTML 的方法。

我正在使用 MSDN 中描述的 Worksheet.SaveAs 方法。

但是,当我查看输出时,它已经保存并保存了工作簿中的所有工作表,而不仅仅是我选择的那个。好像 Worksheet.SaveAs 和 Workbook.SaveAs 只是做同样的事情。

简化代码:

public static void saveSingleSheetAsHTML(string workbook, string destination, string sheetName)
{
    Application excel = new Application();
    excel.Workbooks.Open(Filename: workbook);
    Microsoft.Office.Interop.Excel._Worksheet worksheet = excel.Worksheets[sheetName];
    var format = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;
    worksheet.SaveAs(destination, format);
}

现在,当我打开生成的 HTML 文件时,它只导出了整个工作簿,而不是工作表。

【问题讨论】:

标签: c# excel


【解决方案1】:

正如Tim Williams 在点击上面I love my monkey 发布的链接后发现的评论中所说:

“您不能在工作表上调用 SaveAs - 首先调用 .Copy 来创建一个 仅包含该工作表的独立新工作簿,然后保存 工作簿。”

不知道为什么不能。 MSDN 上的文档对此没有提供任何线索,并建议它应该是可能的。

创建了一个新的工作簿:

var newbook = excel.Workbooks.Add(1);

复制工作表,将其作为第一张工作表:

excelWorksheet.Copy(newbook.Sheets[1]);

然后删除默认的“Sheet1”,它将始终是第二张:

newbook.Worksheets[2].Delete();

然后调用SaveAs方法,然后关闭新书:

newbook.SaveAs(Filename: destination, FileFormat: format);
newbook.Close();

这确实将新工作簿保存为 HTML,但也将选项卡放在底部,我希望避免这种情况,因为现在只有 1 个选项卡。它确实满足了我的最低需求,但我想弄清楚如何使它更整洁。

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2011-03-02
    相关资源
    最近更新 更多