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

C# 使用Interop C保存Excel电子表格#,c#,excel,interop,C#,Excel,Interop,此程序按预期运行和退出。它会将单元格B3中的正确值打印到控制台。关闭时,它会询问我是否要替换现有文件。我点击是。当我在Excel中打开电子表格时,该值仍然在单元格B3中,尽管单元格为.ClearContents() 有什么想法吗?您对单元格的调用。ClearContents()将从单元格中清除公式和值常量。这绝对是可行的。您可以在调用cell.ClearContents()后通过测试cell.Value2==null来确认这一点,该值应为true 我相信代码的问题在于调用book.Close(t

此程序按预期运行和退出。它会将单元格B3中的正确值打印到控制台。关闭时,它会询问我是否要替换现有文件。我点击是。当我在Excel中打开电子表格时,该值仍然在单元格B3中,尽管单元格为.ClearContents()


有什么想法吗?

您对
单元格的调用。ClearContents()
将从单元格中清除公式和值常量。这绝对是可行的。您可以在调用
cell.ClearContents()
后通过测试
cell.Value2==null
来确认这一点,该值应为
true

我相信代码的问题在于调用
book.Close(true,“HWYFAB.xlsx”,false)
。问题是您正在显式地传递工作簿的名称,但您正在离开路径。(请注意,当您打开工作簿时,您将包含完整路径,包括“C:\”目录。)保存时,如果不保留工作簿的完整路径,则您将保存到当前目录,该目录可以是“我的文档”或其他任何目录

如果希望将工作簿保存在其原始位置,则应为
文件名
参数传入
Type.Missing
。例如:

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();
}
这个想法还没有经过测试,但我相当有信心,这对你来说应该是可行的。试试看


--迈克

这就成功了。这太奇怪了,我在电脑上搜索了所有的HWYFAB.xlsx副本,只有一个在C:\。谢谢,很奇怪。。。我想,你可能必须尝试搜索非索引位置?很高兴你已经克服了你的问题!
book.Close(true, Type.Missing, false);