2009-08-25 185 views
4

簡單的問題。有誰知道一種簡單的方法將SpreadsheetML(Excel 2003 XML)轉換爲用於Excel 2007(xlsx)文件的Open Document XML嗎?Excel將SpreadsheetML轉換爲開放XML(XLSX)

我有一個圖書館,不幸的是不讀取XML格式,所以我需要嘗試找到一種方法來讀取數據,這不涉及另一個庫。

任何建議表示讚賞。

+0

位的詳細信息。我不能/不能使用Interop的原因是因爲這可能是Interop不起作用的服務器進程。我目前使用的庫是一種解決方法,但僅支持XLS和XLSX文件。 我最近有一個新的需求需要與另一個函數一起工作,它產生適用於Excel 2003的XML。但是這不會/不會被庫支持,所以我試圖找到一種方法在這附近。 – Ian 2009-08-25 16:19:19

回答

1

文件格式確實發生了顯着變化,從SpreadsheetML到Office Open XML。

而且,由於現在電子表格文件被分解成多個XML文件(這些文件都被壓縮),所以沒有真正希望有一個簡單的XLST解決方案。

不幸的是,最直接的操作過程是使用宏自動化Excel來打開每個SpreadsheetML文件並執行「另存爲」到新的格式。這可以在帶有Office 2007文件格式插件的Office 2003中完成。也許這可以降級到批處理,所以服務器不直接涉及?

如果電子表格中的數據不重要並遵循一致的格式,則可以編寫自己的分析器以直接從SpreadsheetML文件導入。

+0

認爲我們可能必須手動完成這些操作,並且根據用戶是否自動執行某些限制而對用戶進行限制。謝謝 – Ian 2009-09-01 11:00:14

1

一個簡單的方法是使用Excel的COM庫(Excel 2007),但我認爲這不是您正在尋找的答案。

你的圖書館能夠做什麼?您可以使用Open XML SDK 2.0根據庫的輸出編寫電子表格文檔。

問候

+0

只檢查了一下,但不幸的是,因爲我們目前必須針對.NET 2.0構建 – Ian 2009-08-25 16:21:27

0

IIRC了Office 2003格式的工作原理是OpenDocument格式:它是裏面的XML文件的ZIP文件,所以(如果你有足夠的時間/勇氣),你可以打開它,找到包含XML文件數據並最終處理XML。

我知道,這個答案是勇敢的開發商;)

問候。

+2

但是,XLSX zip文件中的XML看起來與Excel 2003 XML格式中的XML有很大不同。 – Ian 2009-08-25 16:20:10

+0

恐怕這是M $球員的「功能」,但你可以填補空白;) – ATorras 2009-08-25 16:32:26

+0

是的,WordprocessingML!= OpenXML。 – BrainSlugs83 2013-06-13 04:16:35

2

如果你有很多口袋Aspose.Cells可以讀/寫這兩種格式,並且應該提供非常容易的轉換而不需要自動化。

http://www.aspose.com/categories/.net-components/aspose.cells-for-.net/default.aspx

的Aspose.Cells爲.NET

的Aspose.Cells爲.NET是一個屢獲殊榮的電子表格組件,它允許.NET開發者嵌入到閱讀能力,寫作和操作Excel電子表格到他們自己的應用程序中,而不需要依賴Microsoft Excel。

Aspose.Cells for .NET是一個成熟的,可擴展的,功能豐富的組件,它提供了許多超出其他供應商的簡單數據導出功能的功能。使用Aspose.Cells for .NET開發人員可以導出數據,將電子表格格式化爲最精細的級別,導入圖像,導入圖表,創建圖表,應用和計算複雜公式,保存各種格式的Excel數據等等 - 所有這些需要使用Microsoft Excel或Microsoft Office Automation。

對於企業(內部)開發,每個開發人員的起步價格爲899美元,並且從那裏開始非常陡峭。

+0

+1,因爲確實Aspose能夠完成這項工作,而且實際上首先會繞過這個問題。最後,儘管我編寫了我自己的解析器來使用我們已經購買的API重新構建電子表格。 – Ian 2011-01-25 09:00:27

1

嘗試使用JODConverter。 JODConverter允許使用OpenOffice.org或Libreoffice引擎來轉換SpreadsheetML。

+0

看起來像一個被遺棄的項目? – BrainSlugs83 2013-06-13 04:17:31

0

檢查這個代碼靜態無效XlsToXlsx

static void XlsToXlsx (string sourceFile, string destinationFile) 
{ 
    Type officeType = Type.GetTypeFromProgID("Excel.Application"); 

    Excel.Application app = new Excel.Application(); 
    app.DisplayAlerts = false; 
    // Open Excel Workbook for conversion. 
    Excel.Workbook excelWorkbook = app.Workbooks.Open(sourceFile); 
    // Save file as CSV file. 
    //excelWorkbook.SaveAs(destinationFile, Excel.XlFileFormat.xlCSV); 
    excelWorkbook.SaveAs(destinationFile, Excel.XlFileFormat.xlOpenXMLWorkbook); 
    // Close the Workbook. 
    excelWorkbook.Close(); 
    // Quit Excel Application. 
    app.Quit(); 
}