2012年2月24日 星期五

從偽裝 Excel 到真正 Excel

最近在弄個匯出 Excel 功能

一開始產生 csv 格式, 逗號隔開欄位, 結果 User 反映中文變亂碼
改用 Encoding.UTF8 後, User 又反映日文還是亂碼

就改為產生 html 格式的檔案, 存檔時將副檔名命名為 .xls (偽)
User 終於什麼都 OK 了, 但我卻發現 Excel 2007 開啟時會跳出
您正在嘗試開啟 'xxxxx.xls',其檔案格式與副檔名所指定的格式不同」訊息
(偽 Excel 被識破了~~)

在懶得再次大改程式的前提下
想到了個小修改解決這一切

就是用 Excel 2003 把偽 Excel 開啟
再另存為真正的 Excel

Private Sub SaveAsXls(ByVal xlsFileName As String)
   Dim xlsApp As New Excel.Application
   Dim xlsNewFileName As String = Replace(xlsFileName, ".xls", "_1.xls")
   xlsApp.Workbooks.Open(xlsFileName)
   xlsApp.Workbooks(1).SaveAs(xlsNewFileName , Excel.XlFileFormat.xlExcel9795)

   xlsApp.Workbooks(1).Saved = True
   xlsApp.Quit()
   xlsApp = Nothing

   GC.Collect()
   GC.WaitForPendingFinalizers()

   ' 刪除偽 Excel (不隨手亂丟垃圾的好習慣)
   Dim fiOriginFile As New FileInfo(xlsFileName)
   If fiOriginFile.Exists Then
      fiOriginFile.Delete()
   End If
End Sub

這個做法的缺點是: 必須在 Server 上儲存實際檔案, 且 Server 上要有 Excel 2003 元件

為什麼不一開始就用 Excel 元件來產生檔案 ?
因為 User 要求一堆有的沒的格式
對我來說, 用 html 格式設定比較容易

2012年2月15日 星期三

ASP submit 後中文變亂碼

最近寫了一支 ASP
submit form 之後
所有中文都變成亂碼

試了很久, 最後終於解決
只要在一開始加上一行
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>

2012年2月13日 星期一

Excel 讀取 html 格式的儲存格換行效果

最近用 .NET 產生一個 html 格式的檔案
然後命名為 .xls , 偽裝成 Excel 檔案使用
結果發現在 <td> </td> 中使用 <br>
沒有達到預想中在儲存格換行的效果

幸好找到這一篇 :
[HTML][CSS] 使用 HTML <table> 匯出 Excel 時的斷行 (<br/>) 處理
(From : yilin 的程式日記)

<br style="mso-data-placement: same-cell;" >
只要加上 css , 就可以符合我的需求了
真是太感恩了~