我发现ExcelPackage是一个比 Excel Interop API 更好的库,可以以编程方式创建和维护 Excel 工作表,但它们是在 .xlsx 中生成的。大多数会看到这些文件的人只安装了 office 2003,所以我需要在我的 C# 代码中将最终结果转换为 .xls 文件。
你知道用 C# 代码做这件事的任何方法吗?
**更新我正在尝试使用 SaveAs 方法,但它不起作用,它什么也不做,或者返回错误 0x800A03EC 。
我发现ExcelPackage是一个比 Excel Interop API 更好的库,可以以编程方式创建和维护 Excel 工作表,但它们是在 .xlsx 中生成的。大多数会看到这些文件的人只安装了 office 2003,所以我需要在我的 C# 代码中将最终结果转换为 .xls 文件。
你知道用 C# 代码做这件事的任何方法吗?
**更新我正在尝试使用 SaveAs 方法,但它不起作用,它什么也不做,或者返回错误 0x800A03EC 。
我怀疑这不会是一个流行的答案,但我不认为将文件从 .xlsx 转换为 .xls 是可取的(我打算建议没有必要,但不幸的是,这是一个概括太远)。
“Microsoft Office 兼容包”可免费下载,并为 Office XP 和 Office 2003 添加了对新格式的支持 - 因此,至少在一般情况下,说服您的用户使他们的系统符合规范要好得多,而不是陷入困境你自己不得不处理办公室互操作(这基本上会给你,很可能是你的用户带来很多痛苦)。同样,我相信 Open Office 3 支持新格式。
我确实理解在某些情况下不允许人们将这种功能添加到他们的系统中,但在大多数情况下,添加上述工具将使人们的生活更轻松,因为它会减少使用 Office 2007 的人和使用旧版 Office 的人之间的摩擦版本。
您可以尝试使用 Microsoft.Office.Interop.Excel。您需要在尝试进行转换的机器上安装 Excel。您可以从 COM 选项卡添加引用并使用 Microsoft Excel 12.0 对象库组件。
基本上,您将使用 Workbook.Open() 打开现有工作簿,创建一个新工作表并复制现有数据。然后您可以使用 Workbook.SaveAs() 方法,这将让您在第二个参数中设置文件格式。
试试这个代码:
try
{
Microsoft.Office.Interop.Word.ApplicationClass oWord = new ApplicationClass();
object oMissing = Type.Missing;
object fileName = @"c:\test.docx";
Document oDoc = oWord.Application.Documents.Open(ref fileName, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
object fileName2 = @"c:\test2.doc";
object fileFormat = WdSaveFormat.wdFormatDocument97;
oDoc.SaveAs(ref fileName2, ref fileFormat, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
oWord = null;
Console.WriteLine("Done");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.Read();
这是我的 IBM iSeries 项目中的一段代码。它将任何 Excel 文件转换为 Excel 2003:
string MOVE_DOWNLOADED(string FILENAME)
{
string Path = FILENAME;
Microsoft.Office.Interop.Excel.ApplicationClass app = new Microsoft.Office.Interop.Excel.ApplicationClass();
Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Open(Path,
0,
true,
5,
"",
"",
true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
"\t",
false,
false,
0,
true,
1,
0);
string retval = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\" + "_tmp_" + ".xlsx";
try
{
workBook.SaveAs(retval,
Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel9795,
null,
null,
false,
false,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared,
false,
false,
null,
null,
null);
}
catch (Exception E)
{
MessageBox.Show(E.Message);
}
workBook.Close(null, null, null);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
workBook = null;
GC.Collect(); // force final cleanup!
return retval;
}