作者 主題: 使用Spreadsheet_Excel_Writer遇到兩個狀況  (閱讀 15703 次)

0 會員 與 1 訪客 正在閱讀本文。

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
最近工作寫了一個小型系統,功能是利用網頁輸入資料後會整成試算表下載~
使用PEAR的Spreadsheet_Excel_Writer套件來處理產生試算表部份遇到兩個狀況不知如何解?


由網頁輸入內容情況
1.無法控制判斷欄位內容換行的情況;當輸入連續資料,產生的試算表內容會在一段字串之後自動再換行一次,目前還找不出原因在哪

試算表顯示內容

2.該套件有限制最多單格只能夠輸出255字元,由於系統輸出的欄位很多都可能超出這個限制條件,造成超過的部份被截斷。關於這個問題嘗試修改該套件的設定上限,結果會造成無法輸出;也試過分開資料再合併,但只會保留第一格內容...

其中關於會議單格內容被截斷

不知道是否有其他前輩利用php處理試算表有用此套件,是否有解決辦法?

« 上次編輯: 2008-06-05 20:35 由 huangxianqin »

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4045
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
你太「精實」了啦,

網頁轉成 Excel 我是用「偷吃步」

HTML 表格轉換成 Excel
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
恩.....我了解可以利用CSV或是改變header方式處理...

但我想因為輸出的內容是需要設定格式的,假使採用這樣的方式,不知道處理調整格式部份在花多久時間

比如說:欄位合併、頁首頁尾設定、設定欄高欄寬、字體等等...

當然如果真的該套件處理無法解決我的問題....也許我必須改採用這種方式...OTL

hoyo

  • 榮譽博士
  • 俺是博士!
  • *****
  • 文章數: 4045
  • 性別: 男
  • 有需要的時候,學習就不會分階段。
    • 檢視個人資料
    • 樂咖黑電腦學習網
恩.....我了解可以利用CSV或是改變header方式處理...

但我想因為輸出的內容是需要設定格式的,假使採用這樣的方式,不知道處理調整格式部份在花多久時間

比如說:欄位合併、頁首頁尾設定、設定欄高欄寬、字體等等...

當然如果真的該套件處理無法解決我的問題....也許我必須改採用這種方式...OTL

換個方式想,辛辛苦苦在網頁上呈現完美的格式,為什麼還要匯出到 Excel 處理?

我的說法是,想「另外」處理的我已經有一個管道,嫌醜就請在網頁直接看

如果一定要在使用 Excel ,那我何必在網頁環境開發? 使用 Windows API 不是更方便?

==========

如果我的能力夠,也希望能夠「兩全」,可惜我不是「萬中選一」的人才...
« 上次編輯: 2008-05-27 11:27 由 hoyo »
受人與魚,不如授人與漁
上海自來水來自海上;倫敦好奇人奇好敦倫

Darkhero

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3728
  • 性別: 男
    • 檢視個人資料
    • ㄚ凱隨手紀
會不會是使用者在該欄位有自己打 enter 也就是 \n ....
你在網頁輸出的時候在該欄位加上 nl2br 看一下吧....
希望我們的討論是為了把問題解決,而不是爭論誰對誰錯.
『灌水才是重點,發文只是順便』
『我寧可讓不會釣魚的工程師餓死,也不想讓會餓死的工程師去攪沉公司....』
Blog: http://blog.darkhero.net/
秘密基地: http://www.darkhero.net/comic/
目前服務的網站: http://www.libook.com.tw/

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
Darkhero大大的回覆,無意間讓我注意到一點,似乎剛好解決了我第一個問題 :D

情況不是使用者打了enter,反倒是我在網頁上設定textarea欄位時,加入warp='hard'屬性,剛剛把它改成'soft'後即解決我的問題1.情況

感謝@@

目前針對問題2.,其實也有備案...但感覺不是相當理想的方式,希望若有前輩遇過此問題能提供解決辦法...

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5388
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
255 的限制是 Excel 5 的限制.
請指定不同版本的格式就可以.
代碼: [選擇]
$workbook->setVersion(8); // Use Excel97/2000 Format
對了, unicode 支援也是要 8 才有.
要另外 patch, 官方的版本有支援, 但... 檔案在 100K-200K 以上就會有問題.
patch 出了很久, 但是一直沒納入... :-(
http://blog.teatime.com.tw/1/post/111

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
真是感謝twu2大~~其實小弟曾拜訪過您的部落格有看過這篇

但處理編碼部份我採用iconv轉big5輸出~~這次一併針對編碼部份作修正,也解決問題了

真是感謝阿~可以不用另外寫處理方式了 ;D

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
嗯...最近發現另一種生出 pdf 的方法

About Puno

This project is a PHP module (PHP5 and Linux/Unix only) written in C++ that brings the OpenOffice.org UNO Programming API to the PHP userspace.

You can use it to write scripts that create, modify, read and save OpenOffice.org documents (Writer, Spreadsheet, Drawing). Also, you can export these documents in various formats, like PDF or HTML for example.

Here is a sample php script and this is the document it generates.

It can be installed on any Linux/Unix platform where PHP5 and OpenOffice.org are also available.

If you need more information about the OpenOffice.org API and what you can do with it, please read the Developers Guide - First Steps chapter.

http://puno.sourceforge.net/site.html

有興趣的可以研究看看

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
咦~~@@

樓上這位大大真神~(怎得知小弟下一個專案跟pdf、doc檔輸出有關~ ;D

感謝提供分享~就來研究看看跟Pdflib哪個感覺比較好用~~@@


asako

  • 活潑的大學生
  • ***
  • 文章數: 240
    • 檢視個人資料
試試看 $xls->setVersion('8')

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
原本以為一切都如期搞定.......沒想到目前針對這個狀況上還是遇到很大的瓶頸~~

設定了setVersion(8)後,其實還要作一個動作....要把你的內文編碼指定給$worksheet->setInputEncoding('utf-8');
(我大概去看了一下他做的方式,主要是再把該編碼轉換成Unicode...UTF-16LE,所以應該Big5也可以用)

但是.....這樣的情況下我遇到一個狀況是....在產生內文以前的字串會變成亂碼(中文部份)!

推測是因為整個文件設定了UTF-16LE...但其他還是utf-8......我遇到的部份是要輸出中文的worksheet名稱..跟..設定列印頁首字串..

不知道是否有大大有試過這樣的問題......如何輸出Unicode的試算表名稱取代預設的sheet... :'(

我測試過即使用了iconv轉成utf-16le還是不行......

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5388
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
自己 port Perl 的版本吧. 新的 perl 版本有支援.
不過這個 php 用的是由舊的 perl 版本 port 過來的, 只有 worksheet 的內容可以用 unicode.

要不就自己改, 要不就把不能用 unicode 的地方改用英文吧.

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
請問twu2前輩...您說的perl版本是指系統上裝的perl嗎?

不太懂為何這個套件的問題會跟perl有關係?是因為他在產生excel執行期有使用到perl?

我有試過自己硬著改內容有關轉碼的部份...但結果不盡理想,對16進位整個不熟 :-[

暫時確實是不能用中文的地方以英文輸出.....

不過如果真有能夠解覺得方式還是會繼續嘗試下去~~還望指點 :P

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5388
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
這個 php 的 class, 是先有 perl 的版本, 然後被人 port 到 php 上頭來使用.
不過 port 到 php 之後, 就很少異動了 (至少 0.9.1 出了好久了都沒動, 連那個 unicode 的 bug 一直都不修).
而原本在 perl 上頭的 class 還有在維護, 對於 unicode 的支援比較完整.

如果你有空, 可以試著自己再重新 port 一次最新的 perl 版本到 php 上頭來.

http://search.cpan.org/dist/Spreadsheet-WriteExcel/

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5388
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
回覆: 使用Spreadsheet_Excel_Writer遇到兩個狀況
« 回覆 #15 於: 2008-06-21 15:51 »
http://blog.teatime.com.tw/1/post/301
經過上頭的修正就可以解決 worksheet 名稱與列印的 header/footer 中文問題.

huangxianqin

  • 憂鬱的高中生
  • ***
  • 文章數: 129
    • 檢視個人資料
回覆: 使用Spreadsheet_Excel_Writer遇到兩個狀況
« 回覆 #16 於: 2008-06-22 22:27 »
感謝twu2前輩熱心先行完成了這樣的修補操作紀錄心得提供小弟參考 :o

目前小弟正趕著學習ZF引入新的專案開發,由於這個案子也需要用到Excel輸出(還有Pdf....Orz,也遇到編碼問題不過已找到解決方案,網路高手真多阿 :-[

本打算期間再嘗試修正這問題沒想到前輩已先作過了 :D