台灣最大程式設計社群網站
線上人數
1006
 
會員總數:242482
討論主題:187519
歡迎您免費加入會員
討論區列表 >> ASP >> ASP 讀取 .xls 檔 某欄位取值內容被截斷後綴亂碼
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
ASP 讀取 .xls 檔 某欄位取值內容被截斷後綴亂碼
價值 : 50 QP  點閱數:403 回應數:13

樓主

webtech
初學者
324 131
1989 348
發送站內信

捐贈 VP 給 webtech
請教各位先進,
已苦尋解決方案多日,不知是否尋找方向或關鍵詞錯誤,始終無法找到精確的資訊參考,因此求助站上高手,
請求協助提供運用的技術及方向,感激不盡。

.xls 檔案格式範例如下,

F1 F2 F3 F4 F5

【值】 【值】 【值】 【值】 【值】
.
.
.
【值】 【值】 【值】 【我們都是一家人(實際上字數更多)】 【值】
.
.等



使用ASP迴圈取到例如欄位內容為【我們都是一家人】部分時,會隨機顯示如下,
rs("F4") 取值

我們都是 '內容被截斷

我們都是ӳ '內容被截斷後加上亂碼,下方都是發生過的狀況。

我們都是ʻ널ʺ㩨୥ ਀न镀ˀ㢨{

我們都是牴ാ 㰠琯扡敬ാ 㰠振湥整㹲਍⼼楤㹶਍㈺̀ॖy˄ㅐq㘠ĀLJ

我們都是•楳敺∽∱㔾〶⼼潦瑮㰾琯㹤਍उउउ㰉摴眠摩桴∽ㄵ•敨杩瑨∽〱㸢瀼愠ꌣ崜े

搜尋相關Tags的文章: [ xls ] , [ 亂碼 ] ,
本篇文章發表於2017-08-04 15:14
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

彩虹
檢舉此回應
我需要看你讀取xls的程式碼

另外也請檢察文件編碼
本篇文章回覆於2017-08-04 17:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

webtech
捐贈 VP 給 webtech 檢舉此回應
非常感謝 彩虹大 的回覆,

補充敘述,依據讀取的xls檔案內容不同(結構不變),例如在前10筆資料列出的文字都是正常顯示,
但如第11筆的【F4】欄位的內容字數較多則就會發生一樓敘述的截斷後綴亂碼情形,
讀取不同xls檔案狀況發生的該筆數位置也不同,且有時會有例如第11及第13同時...等隨機錯誤,

但發生的共通點目前看來是某筆F4欄位資料較多時會發生此錯誤,似乎是字數太多所造成的,但不確定,
例如:第一筆~第十筆內的【F4】只有140個字元就沒問題,但如第11及第13內的【F4】有249個字元就發生問題,

有嘗試把第一筆~第三筆刪除,然後就正常了,但依據不同的xls內容有時不靈,況且作業上也不可能把資料先刪除幾筆再列出,


xls檔案用記事本開啟看到的編碼是ANSI,如果編碼不是這樣檢查跟如何變更編碼則仍須請教您,

使用的語法如下,謝謝。

本篇文章回覆於2017-08-04 18:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

彩虹
檢舉此回應
請參考
[Asp].匯入欄位長度>255 的 excel 檔.
http://maxtellyou.blogspot.tw/2010/01/asp255-excel.html
本篇文章回覆於2017-08-04 18:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

webtech
捐贈 VP 給 webtech 檢舉此回應
非常感謝 彩虹大 的回覆,

依據您提供的連結文章,內有兩項設定如下,
解決辦法一,修改 connection 的 connection string,但該內容已與在下所撰寫的連結語法相同。
解決辦法二,修改 web server 上的 register,程式在虛擬主機運作,因此主機商不可能賦予修改的權限或要求。

目前看來問題是出在 ASP處理xls內某欄位使用字元超過255被截斷的問題,不知是否有什麼程式方面可以替代的方案,謝謝。
本篇文章回覆於2017-08-06 21:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

老頑童
捐贈 VP 給 老頑童 檢舉此回應
主要是Register中TypeGuessRows設定的筆數
系統會依此筆數去自動判斷Excel各欄位的型態及長度
假設Excel前幾筆資料長度都不長
那欄位長度就會被定義的比較短
後續資料若超出此長度,就會被截斷

若無法去修改TypeGuessRows值
也許試試固定在Excel第一筆資料塞入較長字串的假資料
讓系統判斷欄位長度時能設的長一點
然後處理時跳過第一筆假資料不處理
但,若連Excel內資料都是無法控制的,大概就gg了
只能改用別種方式開啟Excel
例如Excel Application物件之類,但,這也得看虛擬主機商支不支援


本篇文章回覆於2017-08-07 10:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

webtech
捐贈 VP 給 webtech 檢舉此回應
非常感謝 老頑童 大 的回覆,
目前看來 您提到的 Excel Application 或許是一線生機,
非常幸運的,經測試,該虛擬主機有支援 Excel Application 連結,但又延伸一個亂碼的問題,
就是自xls檔撈出的文字只要是非英數文字在頁面都會呈現問號(例如:??????We???845???abc)
再麻煩大大指導,感謝。
本篇文章回覆於2017-08-07 12:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

彩虹
檢舉此回應
剩下就編碼問題了,你GOOGLE一下

然後這有限定只能只用excel匯入嗎?
我在想你要不要改讀檔案內容匯入
例如 csv
但勢必就要改掉了~
本篇文章回覆於2017-08-07 12:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

webtech
捐贈 VP 給 webtech 檢舉此回應
非常感謝 彩虹大 的回覆,

經測試,目前此亂碼狀況只會發生在國外主機上,但台灣主機上就可以正常顯示,
而該程式也同時會在國外主機上運作,因此亂碼解決部分仍須麻煩各位先進們指導,
感謝。
本篇文章回覆於2017-08-07 13:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

彩虹
檢舉此回應
在此頁上方加入<%@ codepage=65001%>試試看
且檢查你這頁是否有include其他頁面
例如<!--#include file="xxx.asp"--> ,請假查xxx.asp是否也是UTF8

要全部統一語系編碼
本篇文章回覆於2017-08-07 18:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

彩虹
檢舉此回應
如果不行的話,就換成 BIG5 吧
<%@ CODEPAGE="950"%>

國外主機真的會比較麻煩,要多方嘗試
本篇文章回覆於2017-08-07 18:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

webtech
捐贈 VP 給 webtech 檢舉此回應
非常感謝 彩虹大 的回覆,

經測試,指定CODEPAGE用法仍然無效,
使用 Microsoft.Jet.OLEDB.4.0 開啟xls可以正確顯示xls內的中文字,但會有 >255 資料截斷的問題,
改使用 Microsoft Excel Driver 開啟xls則不認識xls內的中文字,但會有問號亂碼的問題,
亂碼解決部分仍須麻煩各位先進們指導,感謝。
本篇文章回覆於2017-08-08 02:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

老頑童
捐贈 VP 給 老頑童 檢舉此回應
在讀取資料前加上 Session.CodePage = 950 試試看
本篇文章回覆於2017-08-08 10:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

webtech
捐贈 VP 給 webtech 檢舉此回應
非常感謝 老頑童 大 的回覆,
Session.CodePage = 950 方式無效,
另外,經詳細確認,無論使用 Microsoft.Jet.OLEDB.4.0 或 Microsoft Excel Driver 開啟xls 都會產生 >255 資料截斷的問題。
本篇文章回覆於2017-08-08 15:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.