2008-09-30 125 views
14

我試圖以編程方式創建Excel 2007文檔。現在,有兩種方法,我發現:以編程方式創建Excel 2007表格

目前,我使用ExcelPackage,它有一些非常嚴重的缺陷和問題。因爲我不需要創建過於複雜的Excel工作表(最「複雜」的是我明確需要將單元格類型設置爲數字或文本),我正在尋找接下來的選項1,但我只是想知道是否有任何其他良好和受支持的方式來生成Excel 2007表?獎勵點數,如果可以創建它們而不必將它們保存到硬盤,即生成並直接將它們輸出到流中。

.NET 3.0的目標在這裏,沒有良善3.5 :(

編輯:感謝這麼遠的XML SDK確實是3.5只,但俄羅斯魯萊特......呃...... COM互操作是也是我想盡可能避免的東西,特別是因爲Excel 2007有一些複雜但是很容易創建的文檔格式,我會看看發佈的各種鏈接和提示

回答

9

你可以嘗試使用Office Open XML SDK 。這將允許您使用說MemoryStream在內存中創建Excel文件,並且比手動生成所有XML更容易。

正如Brian Kim所指出的那樣,SDK的2.0版本需要的.NET 3.5並不適用。 SDK的Version 1也支持.NET 3.0。它並不完整,但至少可以幫助您管理文檔的XML部分以及它們之間的關係。

+0

看來.net 3.5是必需的。 – 2008-09-30 17:42:00

+0

好點,更正。 – 2008-09-30 21:08:12

0

我曾經使用函數庫爲表和段創建正確的XML來生成Wordprocessing Markup文檔。

然後,我只是將響應頭的MIME類型更改爲word文檔,並將XML作爲響應發送給客戶端。它可以在瀏覽器中打開或保存爲文件。

似乎有不被用於Excel相同的2003 SDK雖然有MS Open XML SDK

0

Excel是通過COM對象非常編寫腳本。我還沒有嘗試過,但這應該是一個堅實的解決方案,雖然不是快速或輕量級。

無論你最終做什麼,檢查你的解決方案是否支持Unicode。使用現有解決方案編寫xls文件(即2007年以前的文件),我遇到了一些嚴重的問題。

+2

服務器上Excel的COM自動化可能非常脆弱。微軟只在桌面上支持它。 – 2008-09-30 14:28:51

0

您可以使用主互操作程序集(Office API)以編程方式生成Excel文檔 - 我不想使用它們進行過於複雜的任何操作,但聽起來不像這是您的要求。

此方法也適用於在內存中生成文檔。

這裏有一些資源:

+0

避免PIA ...是的,在.ss和主Interop Ass-Emblies之間的疼痛並不是巧合。相信我,我仍然可以感受到傷害。 – 2008-09-30 22:23:32

0

每個代碼勢利活着恨VBScript中,但其實很簡單,它的工作原理:

Set myxlapp = CreateObject("Excel.Application") 
Set mywb = myxlapp.Workbooks.Add 
myxlapp.Visible = true 

Put在文本文件中,在末尾附加一個「.vbs」。

1

我打算評論BKimmel的帖子,但顯然我還沒有足夠的SO酷點。

如果Excel已經打開,你可以得到那個惱人的「personal.xls已經打開」的消息。我嘗試先獲取應用程序。如果失敗,則創建它:

On Error Resume Next 
Set myxlApp = GetObject(, "Excel.Application") 
If Err.Number <> 0 Then 
    Err.Clear 
    Set myxlApp = CreateObject("Excel.Application") 
    If Err.Number <> 0 Then 
    ' return False, show message, etc. 
    End If 
End If 
2

我只是生成HTML表格,可以通過Excel打開:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
     "http://www.w3.org/TR/html4/strict.dtd"> 

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Wnioski</title> 
<style type="text/css"> 
<!-- 
br { mso-data-placement: same-cell; } 
td { mso-number-format: \@; mso-displayed-decimal-separator: "."; } 
--> 
</style> 

<table> 
<tr style="height:15.0pt"> 
<td style="mso-number-format: general">474</td> 
<td>474</td> 

<tr> 
<td>data2</td> 
<td>data3</td> 

<tr> 
<td style="mso-number-format: &quot;yyyy-mm-dd&quot;">2008-10-01</td> 
<td style="mso-number-format: standard">0.00</td> 

<tr> 
<td style="mso-number-format: general">line1<br>line2<br>line3</td> 
<td></td> 

</table> 

這也適用以及爲在Word連續信件數據源,可以和OpenOffice calc等一起使用。而且它很容易生成。

1

我在中完成了大部分Open XML(xlsx)工作,這遠非一項簡單的練習。我建議使用Office Open XML SDK或其他第三方庫(如SpreadsheetGear或我們的競爭對手之一)(只需Google「SpreadsheetGear」查看我們的競爭對手是誰)。

的SpreadsheetGear的.NET似乎滿足您的需求:

  • 工程與.NET 2.0,.NET 3.0和.NET 3.5。
  • 支持使用IWorkbook.SaveToStream寫入流或使用IWorkbook.SaveToMemory寫入字節數組。
  • 支持Excel 97-2003(xls)工作簿,如果您需要支持很多用戶,這些工作簿可能會成爲您接下來要求提供的工作簿。

您可以下載免費的全功能評估here

相關問題