如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2022年11月21日

當你不再年輕

作者: Fred F.M. Wang (FW知識瑣記) 日期 :2022-11-21


當你不再年輕,就該收斂狂野與孤傲的內心。
當你不再年輕,就該知道知識與時間的價值。
當你不再年輕,就該承擔家庭與工作的責任。
當你不再年輕,就該了解親情與友情的重要。
當你不再年輕,就該分辨夢想與現實的差距。

雖然你不再年輕,雖然生活不再那麼容易,雖然...

你仍然可以擁有一顆赤誠與良善的心。
你仍然可以享受自然與生命的美好。
你仍然可以活出自己美麗的人生。

-- Fred F.M. Wang 葭月有感

 

 

2022年11月1日

Codeigniter Word套表應用的開發步驟

作者: Fred F.M. Wang (FW知識瑣記) 日期:2022-11-1

    PHP的Excel的套表應用開發程序比較單純,直接可以用程式將資料寫入樣板檔的相關儲存格,但是Word的套表就必較複雜,如下圖右邊為Excel套表的開發步驟,左邊是Word套表的開發步驟。
 



準備 :
Codeigniter使用PHPWord版本是CI_PHPWord,程式庫來源為https://github.com/rifqisucahyo/CI_PHPWord
依連結中的說明,將各檔案放到您 Codeigniter專案的資料夾中。
然後將phpword\template.php檔案的這行註釋掉:$replace = utf8_encode($replace);


樣板製作與程式設計步驟 :

Step 1 將設計好的Word表單檔(.docx檔)使用MS Word轉存成XML檔。


Step 2 使用文字編輯器編輯XML, 找到檔案中放資料位置,插入變數,格式為 ${變數名稱}


Step 3 再將編輯完成的XML檔使用MS Word轉存成Word表單檔(.docx檔),再將這個帶有變數名稱的樣板檔放在Server上成為正式的樣板。


Step 4 撰寫程式,將資料寫入樣板文件的變數中,並儲存成表單文件檔。


注意 : 

1. 如果要變更樣板內容,不能直接編輯Step 3的樣板檔(.docx檔),必須修改Step 1產生的XML檔,再進行Step 2至Step 4。

2. 內容中如果有&符號會造成轉換後的Word檔無法讀取,因此先將內容的”&”用逗號等符號取代,再寫入。例如 $objPHPWordOut->setValue("desc",str_replace("&",",",$data["description"]));  


範例程式 : 

 
// 樣本檔檔案路徑為$templatefile, 例如下面程式
$templatefile = dirname($_SERVER["SCRIPT_FILENAME"]) . "/templates/app1/form_template.docx";

// 要寫出的檔案路徑為$outfilepath, , 例如下面程式
$outfile = "exports/app1/doc_" . date("YmdHis"). ".docx";    
$outfilepath = dirname($_SERVER["SCRIPT_FILENAME"]) . "/" .$outfile;    

$this->load->library("word");
$PHPWord = $this->word;            
$objPHPWordOut = $PHPWord->loadTemplate($templatefile);   // 載入樣板檔
// $data是要寫入的資料陣列
$this->write_data_to_word($objPHPWordOut,$data);   // 寫入資料
$objPHPWordOut->save($outfilepath);    // 儲存至寫出檔案

private function write_data_to_word($objPHPWordOut,$data) {            
       // 將$data[“id”]的內容取代樣板檔中變數id也就是 $id
       $objPHPWordOut->setValue("id",$data["id"]);
       …
}

參考來源 : PHPWord中文手冊整理- ITW01