開發環境
專案參考COM:Microsoft.Office.Interop.Owc11
若已有EXCEL範本檔則先轉成XML格式後載入並加入其他資料
程式範例如下(VB.NET)
Dim xlsheets As New Owc11.SpreadsheetClass()
xlsheets.XMLURL = Server.MapPath(".\ExcelFiles") & "\" & "交通住宿名單.xml"
之後便可對xlsheets物件進行操作
例如要處理sheet1則使用下列語法
Dim xlsheet As xlsheets.Worksheets.Item("sheet1")
如果要將最後的結果直接傳送到瀏覽器上讓使用者開啟或存檔, 則可以使用下面的做法
Response.Clear()
Response.Buffer = True
Response.HeaderEncoding = System.Text.Encoding.GetEncoding("big5")
Response.AppendHeader("Content-Disposition", "attachment;filename=" + "交通住宿名單.xml")
Response.ContentType = "application/vnd.ms-excel"
Response.Write(xlsheets.XMLData)
Response.End()
伺服器端
安裝Office Web Componet
優缺點
相對於前面某篇文章提到使用Microsoft Excel 11.0 object library的方式來處理的好處是不會造成excel處理程序殘留
且伺服器端不需要太複雜的環境設定
並且我實際使用Microsoft Excel 11.0 object library來開發時會出現不穩定的現象
有時候報表很順利的產出, 有時候卻因為時間太久造成無法顯示網頁的狀況
且微軟亦不建議使用office object來開發web程式
因為會有很多無法預期的現象, 例如處理程序無法釋放就是其中之一
缺點則是不支援部分格式化功能, 如自動換行、自動調整列高...
不過我發現有一個方法可以解決無法自動換行的問題
把xlsheets.XMLData中包含ss:alignment的字串取代成ss:alignment wraptext="1"
不過無法自動調整列高的問題無法比照辦理,殘念...
寫入cell需注意若欄位為字串型態但內容皆為數字則應於左邊加上"\t"
以確保不會被自動識別為數值型態而被自動格式化(例如去除左邊的0)
若為DateTime型態則需先轉為字串型態=>((DateTime)value).ToString("yyyy/MM/dd")
訂閱:
張貼留言 (Atom)
vue3-simple-alert 學習心得
官網 顯示提示輸入訊息並於按下確定時檢查是否有輸入,防止未輸入就按確定,且和按取消用不同邏輯處理 VueSimpleAlert.fire({ title: '請輸入原因', input: 'text', showCancel...
-
1. 設定檔案下載儲存位置為 C:\Users\%username%\AppData\Local\Google\Chrome\User Data\Default\Cache 2. 勾選"下載每個檔案前詢問儲存位置" 3. 針對不要下載的檔案類型於第一...
-
自動設定欄寬 sheet.Cells.AutoFitColumns(3, 20); // 必須設定 min 跟 max 才會正常作用 凍結欄位 sheet.View.FreezePanes(4, 4); 標題列 ws.PrinterSettings.RepeatRo...
-
使用 FreeSpire.XLS ... ep.Save(); using (var workbook = new Workbook()) using (var memStream = new MemoryStream()) { workbook.LoadFromSt...
沒有留言:
張貼留言