使用Interop C#保存Excel电子表格

6
static void Main()
{
  Application excelapp = new Application();
  Workbook book = excelapp.Workbooks.Open(@"C:\HWYFAB.xlsx",
    0, false, 5, "", "", false, XlPlatform.xlWindows , "",
    true, false, 0, true, false, false);

  Worksheet sheet = (Worksheet)book.Sheets[1];

  Range cell = (Range)sheet.Cells[3, 2];
  Console.WriteLine(cell.Text);
  cell.ClearContents();
  book.Close(true, "HWYFAB.xlsx", false);
  excelapp.Quit();
}

这个程序按预期运行并退出。它确实将B3单元格中的正确值打印到控制台。关闭时询问是否要替换现有文件。我点击了是。当我在Excel中打开电子表格时,尽管使用了cell.ClearContents(),但该值仍然在B3单元格中。
有什么想法吗?
1个回答

5
你调用的cell.ClearContents()将清除单元格中的公式和值。这应该是有效的。你可以在调用cell.ClearContents()后通过测试cell.Value2 == null来确认,这应该是true
我认为你代码中的问题在于对book.Close(true, "HWYFAB.xlsx", false)的调用。问题在于你明确传递了工作簿的名称,但是忽略了路径。(请注意,当你打开工作簿时,你包括完整的路径,包括"C:\"目录。)当你保存时省略了工作簿的完整路径,你正在保存到当前目录,这可能是"我的文档"或任何其他地方。
如果你想在原地保存工作簿,请将Type.Missing传递给Filename参数。例如:
book.Close(true, Type.Missing, false);

这个想法没有经过测试,但我非常有信心这对你有用。试一下吧...
-- Mike

成功了。很奇怪,我在电脑上搜索了所有的HWYFAB.xlsx副本,只有一个在C:\里。谢谢。 - Wesley
非常奇怪...我猜你可能得尝试搜索未索引的位置?不过很高兴你已经解决了问题! - Mike Rosenblum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接