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

Wes*_*ley 6 c# excel interop

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();
}
Run Code Online (Sandbox Code Playgroud)

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

有什么想法吗?

Mik*_*lum 5

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

我相信你的代码的问题在于调用book.Close(true, "HWYFAB.xlsx", false).问题是你明确地传递了工作簿的名称,但是你离开了这条路.(请注意,当您打开工作簿时,您将包括完整路径,包括"C:\"目录.)通过在保存时离开工作簿的完整路径,您将保存到当前目录,这可能是"我的文件"或其他任何地方.

如果您想保存就地工作簿,在其原来的位置,那么你应该在传递Type.MissingFilename参数.例如:

book.Close(true, Type.Missing, false);
Run Code Online (Sandbox Code Playgroud)

这个想法未经测试,但我相信这对你有用.试试看...

- 迈克