因此,我们正在使用第三方组件进行开放并在Excel工作表上进行一些工作。但是该工具无法处理Excel 95文件。有谁知道可以将Excel 95文件转换为更高版本格式的工具?它可以指向外部应用程序......基于命令行的东西最好。
另外:我们不能使用Excel COM Interop。
答案 0 :(得分:3)
您可以使用Microsoft Access Database Engine 2010打开它,并使用DocumentFormat.OpenXml.Packaging.SpreadsheetDocument类将其写入xlsx文件。
Google ado.Net excel c#
,你会发现很多关于如何设置连接字符串和打开Excel文件的示例。 (例如http://sharpertutorials.com/accessing-excel-spreadsheets-within-c-adonet/)
理论上,您应该能够遍历工作表和行/列,并以类似的方式将它们写入xlsx文件。
答案 1 :(得分:3)
你可以使用一个小的Excel助手宏来。使用命令行打开你的95源和.Save作为另一种格式。您可以使用kernel32 / GetCommandLine例程将cmdline arg放入应用程序中。
为此,请创建工作簿“Converter.xls”并插入以下代码
模块“ThisWorkbook”
Private Sub Workbook_Open()
Dim CmdRaw As Long, CmdLine As String, Idx As Integer
Dim MyFile As Workbook
CmdRaw = GetCommandLine
CmdLine = CmdToSTr(CmdRaw)
' Msgbox CmdLine
Idx = InStr(1, CmdLine, "/e/")
Set MyFile = Workbooks.Open(Mid(CmdLine, Idx + 3, 99))
MyFile.SaveAs "Test2003.xls", xlExcel7
Application.Quit
End Sub
模块“Module1”
Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long
Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As Long)
Function CmdToSTr(Cmd As Long) As String
Dim Buffer() As Byte
Dim StrLen As Long
If Cmd Then
StrLen = lstrlenW(Cmd) * 2
If StrLen Then
ReDim Buffer(0 To (StrLen - 1)) As Byte
CopyMemory Buffer(0), ByVal Cmd, StrLen
CmdToSTr = Buffer
End If
End If
End Function
最后,通过命令行从包含95-XLS
的路径调用此方法C:\Progra~1\Micros~2\OFFICE11\excel Converter.xls /e/test95.xls
test95.xls将以xlExcel7格式打开并保存为test2003.xls。
到目前为止基本的技术......现在你可以创造性地添加第二个cmd行参数(用“/”分隔 - 更智能地解析等等
重要:Excel必须在“宽松安全”上运行以避免启动时出现宏警告消息 - 但是只要您调试警告消息就是GREAT(禁用允许您返回代码;-))
我快速&脏在Excel2003上测试了这个
希望有所帮助