2013-03-21 284 views
6

我正在研究将xlsx文件转换为xls文件的控制台应用程序。我不想将它从xlsx重命名为xls,因为它将在Excel 2007中打开,但它将在Excel 2003中显示为损坏的文件。寻找一种加载文档的方式,然后将它保存为xls格式。C#将Excel 2007(xlsx)文件转换为Excel 2003(xls)文件

我当前的代码只需重命名你想XlFileFormat.xlExcel8的XLSX为XLS

string fileName = @"C:\Users\L-3\Desktop\my.xlsx"; 
string svfileName = @"C:\Users\L-3\Desktop\ssc\my1.xls"; 
object oMissing = Type.Missing; 
var app = new Microsoft.Office.Interop.Excel.Application(); 
var wb = app.Workbooks.Open(fileName, oMissing, oMissing, 
       oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing); 
wb.SaveAs(svfileName, XlFileFormat.xlOpenXMLTemplate, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
app.Quit(); 

回答

1

试着用XlFileFormat.xlExcel9795保存。您也可以使用XlFileFormat.xlWorkbookNormal

+1

这会将文件保存为Excel 95-97格式,如果您使用的任何功能> = 2003,它们将不起作用! – JMK 2013-03-21 14:52:34

+0

引发异常:“来自HRESULT的异常:0x800A03EC” – m2pathan 2018-01-01 06:05:50

4

你枚举是错误的,而不是XlFileFormat.xlOpenXMLTemplate,所以你的代码会像这样:

string fileName = @"C:\Users\L-3\Desktop\my.xlsx"; 
string svfileName = @"C:\Users\L-3\Desktop\ssc\my1.xls"; 
object oMissing = Type.Missing; 
var app = new Microsoft.Office.Interop.Excel.Application(); 
var wb = app.Workbooks.Open(fileName, oMissing, oMissing, 
       oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing); 
wb.SaveAs(svfileName, XlFileFormat.xlExcel8, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
app.Quit(); 

更多信息here

+0

引发异常:'来自HRESULT的异常:0x800A03EC' COMEXception未处理。它是否在你的最后? – 2013-03-21 14:13:56

+0

我认为xlExcel8正在产生问题。 – 2013-03-21 14:28:39

+1

我只是花时间测试上面的代码,它在我的电脑上完美运行。 – JMK 2013-03-21 14:32:00

0

我发现下面的代码片段从here

// Create new XLSX file. 
var xlsxFile = new ExcelFile(); 

// Load data from XLSX file. 
xlsxFile.LoadXlsx(fileName + ".xls", XlsxOptions.PreserveMakeCopy); 

// Save XLSX file to XLS file. 
xlsxFile.SaveXls(fileName + ".xls"); 

它使用this component

+0

这将在我的应用程序中添加依赖项。 o.O – 2013-03-21 14:18:39

0

我觉得这有你要找的答案:

What is the correct `XlFileFormat` enumeration for Excel 97-2003

您正在使用的文件格式xlOpenXMLTemplate。尝试使用xlExcel8而不是?这应该是97-2003 Workbooks的文件格式。

+0

它引发了一个com例外。你能创建一个控制台并再次检查吗? – 2013-03-21 14:15:57

+0

不幸的是,我无法做到这一点。我注意到@JMK说这是行得通的。我确信你以前的文件格式,'xlOpenXMLTemplate'不正确。 SaveAs方法应该为Excel 97-2003工作簿(.xls)使用正确的文件格式枚举,这应该是xlExcel8。 – 2013-03-21 14:50:03

相关问题