Excel互操作保存我新创建的电子表格抛出一个异常

本文关键字:异常 一个 电子表格 新创建 互操作 Excel 创建 保存 | 更新日期: 2023-09-27 18:14:33

我正在使用c#创建一个电子表格,下面是代码:

try
{
    _excel = new Excel.Application();
    _excel.Visible = false;
    _workbook = _excel.Workbooks.Add( Type.Missing );
    _worksheet = (Excel.Worksheet)_workbook.Sheets[1];
    createColumnHeaders();
    _workbook.SaveCopyAs( savePath );
}
catch (Exception ex)
{
       Logger.Error( "Error creating spreadsheet: {0}", ex.Message );
}
finally
{
    // Cleanup
}

运行得很好,将工作表保存到savePath中。但是,如果我将SaveCopyAs()更改为

SaveAs( savePath, 
        Excel.XlFileFormat.xlWorkbookNormal, 
        Type.Missing,
        Type.Missing, 
        false, 
        false, 
        XlSaveAsAccessMode.xlNoChange,
        Type.Missing, 
        Type.Missing, 
        Type.Missing, 
        Type.Missing, 
        Type.Missing );

则应用程序获得一个COMException,表示

'C:'//temp/00-04.20.18-24-07-2014/' cannot be accessed. The file may be corrupted,        
located on a server that is not responding, or read-only.

这是一个痛苦,因为我真的需要保存在。xls格式,而不是。xlsx。知道为什么savea()会出现这个异常吗?

Excel互操作保存我新创建的电子表格抛出一个异常

很明显这里出了什么问题。当然,这不是一个有效的路径,//应该只出现在包含文件系统的机器的路径的开头字符。

当你使用微软的应用软件时,你将不得不取消"Windows像Unix一样工作"的期望。当您进行直接操作系统调用时,路径中的正斜杠不会造成问题。Windows很好地支持它们,至少是因为Windows NT曾经开箱即用地支持Posix。对于其他应用程序,尤其是那些源代码已经有25年历史的应用程序,情况就不一样了。但不仅限于旧代码,VS也有问题。微软对待这类错误报告的方式有点像Jeff Atwood对待复数错误。

正确的路径分隔符应该是反斜杠。