C#将.xlsx转换为.xls

3
我使用ClosedXML.dll创建Excel文件,但是ClosedXML将Excel文件保存为.xlsx格式,而我的客户电脑只运行Office 2003,无法打开.xlsx文件,我该如何将.xlsx转换为.xls格式呢?
如果您有任何建议,将不胜感激。感谢大家。
8个回答

5

2

3
为什么你要发这个帖子,明明已经有人发过了? - tomfanning
当另一个人添加了他的答案时,我正在编辑我的帖子,它在我发布时并不显示在我的屏幕上,但感谢您让我知道。 - Derek

1
你可以尝试使用NET Office(http://netoffice.codeplex.com/),它可以将xls转换为xlsx,这样你就可以使用closedXML处理这些文件。

1

您可以使用Excel c#将XLSX转换为XLS

像这样的代码:

// 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");

如果您查看该软件的网站,会发现有一个免费版本。 - user1409909
确实如此。它限制每张工作表的行数为150行,每个工作簿最多5个工作表,但它确实存在。总的来说,我仍然保持我的-1,因为我仍然认为这应该在答案中说明。 - Machado

0

使用 .XlFileFormat.xlExcel7 格式化 Excel 95 文件。


0

0

我几天前曾发布过一个关于此问题的问题。

注意这是一个vba解决方案。

它循环遍历一个文件夹,依次打开每个工作簿并将它们保存为.xls格式。只需更改标记为C:xxx的路径为您的.xlsx文件的位置即可。它避免了要求最终用户执行操作以打开您的产品,并且在我的经验中,如果您有很多用户,您将会有一些无法或不愿意安装兼容性包。

Option Explicit
Sub Convert_to972003()
    Dim orgwb As Workbook
    Dim mypath As String, strfilename As String
    Dim nname As String

    '--> Error Handling
    On Error GoTo WhatHappened

    '--> Disable Alerts
    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    '--> Specify location of workbooks
    mypath = "C:\xxx"
    strfilename = Dir(mypath & "\*.xlsx", vbNormal)

    '--> Check the specified folder contains files
    If Len(strfilename) = 0 Then Exit Sub

    '--> Start Loop, end when last file reached
    Do Until strfilename = ""

    '--> Open a workbook
        Set orgwb = Application.Workbooks.Open _
        (mypath & "\" & strfilename)

        '--> Create new Filename, Save in new File Format and Close
        nname = Replace(strfilename, ".xlsx", ".xls")
        orgwb.SaveAs mypath & "\" & nname, FileFormat:=xlExcel8
        orgwb.Close
        strfilename = Dir()
    Loop

    '--> Enable Alerts
    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With

Exit Sub

WhatHappened: MsgBox Err.Description

End Sub

-1

来自ClosedXML.dll常见问题解答

它支持Excel 2003及之前的格式(.xls)吗?不支持。ClosedXML仅支持Excel 2007/2010格式(.xlsx)。

最后编辑于2011年5月16日下午7:45,版本1,由MDeLeon编辑

sec_goat于7月19日下午5:54说:我不知道这是否是正确的地方,但这是我用于xls文件的解决方法。我在Interop.Excel中打开它们并将它们保存为新的文件类型。这不是最优雅的方法,但至少给人们一个想法。

public void Convert(String filesFolder)
{
  files = Directory.GetFiles(filesFolder);

  var app = new Microsoft.Office.Interop.Excel.Application();
  var wb = app.Workbooks.Open(file);
  wb.SaveAs(Filename: file + "x", FileFormat: Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook);
  wb.Close();
  app.Quit();
}

希望这能帮到你 ;)

这是如何从 .XLS 转换为 .XLSX 的方法。提问者问的是相反的情况。使用互操作可能是适当的,但我假设(也许是错误的)他们正在使用 ClosedXML,因为他们无法使用互操作。 - Roger Lipscombe
抱歉,我失误了,我应该删除这个吗? - Jook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接