關於「PHPOffice」的使用範例 [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



關於「PHPOffice」的使用範例
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 34
HP : 169 / 845
MP : 571 / 17685
EXP: 81
離線
## PHPOffice / PhpSpreadsheet

昨天參與下面這個討論

* https://www.facebook.com/groups/ubuntu.zh.hant/permalink/2553986081323365/

想到這之前相關的討論

* https://www.facebook.com/groups/ubuntu.zh.hant/permalink/2480940128627961/
* https://www.facebook.com/groups/ubuntu.zh.hant/permalink/2486647224723918/

那時候有寫一些範例,放在「GitHub」上,

剛討論的時候,想到有些使用技巧,可以整理過來,給有類似需求的人一個參考和探索的起點。

之前寫的「PHPOffice/PhpSpreadsheet」範例,是放在「demo-php-office / demo-php-spreadsheet

剛討論的時候,又寫另一個範例在「demo-case/filter-some-row/use-php-office」。


待續...

4/14 0:43:04
應用擴展 工具箱
回覆: 關於「PHPOffice」的使用範例
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 34
HP : 169 / 845
MP : 571 / 17685
EXP: 81
離線
一開始從下面這個討論

https://www.facebook.com/groups/ubuntu.zh.hant/permalink/2480940128627961/

了解到有「localc --convert-to」這個功能

以下提到的範例,可以在「demo-php-office/demo-convert-to/demo-ods-to-csv-filter-options」找到

================================================================================

## 範例: 從 ods 轉成 csv


localc --convert-to csv demo.ods



之前寫在「test-0010.sh」。

================================================================================

## 範例: 從 csv 轉成 ods


localc --convert-to ods demo.ods



之前寫在「test-0020.sh」。

================================================================================

接著在下面的討論中,了解到從「ods」轉「csv」可以保留公式

* https://www.facebook.com/groups/ubuntu.zh.hant/permalink/2486647224723918/

一開始我用「LibreOffice」的圖形界面操作,發現是可以的,

後來就在想指令要怎麼下,

所以我又做了一點探索,發現到「Filter Options」。

所以要保留公式的下法如下


localc --headless --convert-to csv:"Text - txt - csv (StarCalc)":44,34,76,,,,true,,,true demo.ods



之前寫在「test-0060.sh」。

================================================================================

其他的範例,就請參考「demo-php-office/demo-convert-to/demo-ods-to-csv-filter-options/*.sh」。


另外還有一些範例,是先轉成「csv」,對「csv」做一些合併或過濾,然後再轉回「ods」。

可以在下面兩個地方找到

* demo-php-office/demo-case/filter-some-row
* demo-php-office/demo-convert-to

================================================================================

待續...

4/14 0:46:43
應用擴展 工具箱
回覆: 關於「PHPOffice」的使用範例
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 34
HP : 169 / 845
MP : 571 / 17685
EXP: 81
離線
在討論的時候,

有提到另一種方式,不是透過「PHPOffice / PhpSpreadsheet」處理「ods」。

而是先透過「localc --convert-to」,

先將「ods」轉成「csv」,然後處理「csv」,最後再將「csv」轉回「ods」。

在處理csv資料時,其中有一種方式是採用「awk」來操作,
可以當作案例學習,當作學習「awk」的起點,所以特別提出來。
但要注意的是,要採用「awk」的方式,下面我寫的範例,有個前提是「儲存格資料」不能有「,」。

* demo-php-office/demo-case/filter-some-row/use-awk/main.sh
* demo-php-office/demo-case/filter-some-row/use-awk/main.awk

處理「csv」,還有其他種方式,其他的方式案例,請參考下面的網址

* demo-php-office/demo-case/filter-some-row
* demo-php-office/demo-convert-to



## awk 相關討論

* #3 回覆: grep 獲取 字串

4/14 1:02:00
應用擴展 工具箱
回覆: 關於「PHPOffice」的使用範例
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 34
HP : 169 / 845
MP : 571 / 17685
EXP: 81
離線
更早以前
在另一個討論「#7 回覆: Unicode9.0字元一覽有感(如何透過unzip確認ODF是否有內嵌字型)」。
裡面提到的關於「odf」的操作,也可以用來操作「ods」。

先下載範例檔


wget -c 'https://raw.githubusercontent.com/samwhelp/demo-php-office/master/demo-case/filter-some-row/use-php-office/data/input.ods' -O dmeo.ods



================================================================================

接著執行


unzip -l demo.ods



顯示


Archive:  demo.ods
  Length      Date    Time    Name
---------  ---------- -----   ----
       46  2019-04-13 05:37   mimetype
     2271  2019-04-13 05:37   Thumbnails/thumbnail.png
        0  2019-04-13 05:37   Configurations2/toolpanel/
        0  2019-04-13 05:37   Configurations2/menubar/
        0  2019-04-13 05:37   Configurations2/statusbar/
        0  2019-04-13 05:37   Configurations2/progressbar/
        0  2019-04-13 05:37   Configurations2/images/Bitmaps/
        0  2019-04-13 05:37   Configurations2/floater/
        0  2019-04-13 05:37   Configurations2/toolbar/
        0  2019-04-13 05:37   Configurations2/popupmenu/
        0  2019-04-13 05:37   Configurations2/accelerator/
     7296  2019-04-13 05:37   content.xml
      843  2019-04-13 05:37   meta.xml
     9292  2019-04-13 05:37   styles.xml
      899  2019-04-13 05:37   manifest.rdf
     7649  2019-04-13 05:37   settings.xml
     1068  2019-04-13 05:37   META-INF/manifest.xml
---------                     -------
    29364                     17 files



================================================================================

也可以執行下面指令解開


unzip demo.ods -d demo



顯示


Archive:  demo.ods
 extracting: demo/mimetype
 extracting: demo/Thumbnails/thumbnail.png
   creating: demo/Configurations2/toolpanel/
   creating: demo/Configurations2/menubar/
   creating: demo/Configurations2/statusbar/
   creating: demo/Configurations2/progressbar/
   creating: demo/Configurations2/images/Bitmaps/
   creating: demo/Configurations2/floater/
   creating: demo/Configurations2/toolbar/
   creating: demo/Configurations2/popupmenu/
   creating: demo/Configurations2/accelerator/
  inflating: demo/content.xml
  inflating: demo/meta.xml
  inflating: demo/styles.xml
  inflating: demo/manifest.rdf
  inflating: demo/settings.xml
  inflating: demo/META-INF/manifest.xml



================================================================================

執行


tree demo



顯示


demo
├── Configurations2
│   ├── accelerator
│   ├── floater
│   ├── images
│   │   └── Bitmaps
│   ├── menubar
│   ├── popupmenu
│   ├── progressbar
│   ├── statusbar
│   ├── toolbar
│   └── toolpanel
├── content.xml
├── manifest.rdf
├── META-INF
│   └── manifest.xml
├── meta.xml
├── mimetype
├── settings.xml
├── styles.xml
└── Thumbnails
    └── thumbnail.png

13 directories, 8 files



================================================================================

其他的操作,就不再贅述了,可以參考之前的討論「#7 回覆: Unicode9.0字元一覽有感(如何透過unzip確認ODF是否有內嵌字型)」。

================================================================================

另外之前還有一個相關的討論「#23 回覆: [自製注音輸入法表格分享]全字庫注音2016年08月份版本

裡面有提到「phpoffice/phpexcel」,之前有些寫了一些簡單的範例:[1],[2],[3],[4]

這個應該是之前的版本,可以看到「GitHub」上的「PHPOffice/PHPExcel」是「ARCHIVED」。

還有「README.md」的說明。

現在應該要改用「PHPOffice/PhpSpreadsheet」。

也是「#1」一開始提到的。

================================================================================

有一個輔助工具「xmllint」,要特別一提的

可以執行


xmllint --format demo/content.xml



可以執行


xmllint --format demo/meta.xml






================================================================================

參考

https://unix.stackexchange.com/questions/56822/how-do-i-parse-namespaces-from-an-xml-file-using-xmllint-and-bash

因為「namespace」的關係,使用另外一個輔助工具「xmlstarlet」,搭配「XPath」來找資料,比較好操作。

執行


xmlstarlet sel -t -v //meta:generator demo/meta.xml



顯示


LibreOffice/6.0.7.3$Linux_X86_64 LibreOffice_project/00m0$Build-3s



可以執行


xmlstarlet sel -t -v //table:table-cell demo/content.xml



若是使用「xmllint」,

執行


xmllint --xpath "//*[local-name()='generator']/text()" demo/meta.xml



顯示


LibreOffice/6.0.7.3$Linux_X86_64 LibreOffice_project/00m0$Build-3



================================================================================

另外還有一個工具「xpath」,也可以搭配「XPath」來找資料。

可以執行


xpath -q -e '//meta:generator/text()' demo/meta.xml



顯示


LibreOffice/6.0.7.3$Linux_X86_64 LibreOffice_project/00m0$Build-3



可以執行


xpath -q -e '//table:table-cell/text:p/text()' demo/content.xml



================================================================================

而「xmllint」也可以搭配「XPath」來找資料。

舉例:


wget -c 'https://www.ubuntu-tw.org/' -O index.html



會下載一個檔案「index.html」

先執行


xmllint --html --xpath '//a/@href' index.html



可以抓到,但開頭會有些parse錯誤。
但那些錯誤是在「stderr」,

下面指令會將「stdout」導向「list.txt」,所以就暫時不用理會那些錯誤訊息。


xmllint --html --xpath '//a/@href' index.html | sed 's/ /\n/g' | awk -F 'href="' '{print $2}' | awk -F '"' '{print $1}' > list.txt



接著就可以執行下面指令,觀看「list.txt」。


less list.txt



================================================================================

而「php」也有類似的工具,就請自行探索了

* https://www.php.net/manual/en/class.domxpath.php

可以搭配閱讀

* https://github.com/PHPOffice/PhpSpreadsheet/blob/master/src/PhpSpreadsheet/Reader/Ods.php
* https://github.com/PHPOffice/PhpSpreadsheet/blob/master/src/PhpSpreadsheet/Reader/Csv.php

================================================================================


以上提供參考,讓想要深究的人,有一個探索的起點

報告完畢


4/14 1:35:01
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.