其實這個需求算是老問題了,網路上也有許多的介紹與解法,但是剛好本人最近遇到的算是比較麻煩的細節需求,所以在這個浮水印的部分會多做一些篇幅介紹,也因此會從基本的部分提起,希望在做浮水印的各位或是需要用類似方法插入圖片的朋友可以參考參考。
前言
其實這個需求算是老問題了,網路上也有許多的介紹與解法,但是剛好本人最近遇到的算是比較麻煩的細節需求,所以在這個浮水印的部分會多做一些篇幅介紹,也因此會從基本的部分提起,希望在做浮水印的各位或是需要用類似方法插入圖片的朋友可以參考參考。
在Excel中浮水印加入方法
其實如果是有寫過Word程式的人,或是有遇到過浮水印需求的人應該多少都會知道要在哪裡加入浮水印才對,其實在Word中,加入自己的浮水印的方式需要透過「頁首頁尾」的方式插入( 在Word插入浮水印圖片也有很多細節要注意,比Excel麻煩 ),而且透過此種方式,如果你的頁首頁尾有設定連結到前一頁的話,每個Page的設定都一樣會很方便…( 但現實是每份Excel或Word的編輯來源都不一定是同種編輯方式... 所以這部分也會需要強化,但不在此篇範圍 )
頁首頁尾插入
而在Excel,也有頁首頁尾的方式插入,首先讓我們看一下在Excel中的操作:
插入頁首頁尾 –> 選擇圖片 -> 從檔案:
此時會看到浮水印圖片(本人先製作好了),並且在上方頁首會有&[圖片]
如果要觀察有沒有插入,可以從「整頁模式」去觀察。
會發現在插入圖片後,在頁首的部分有一個 "&圖片" 表示插入的格式是圖片檔,而透過程式的插入則是以下兩行
currentSheetPageSetup.LeftHeaderPicture.Filename = "your picture path";
currentSheetPageSetup.LeftHeader = "&G";
上述針對目前的workSheet撈取Pagesetup後對Pagesetup的屬性LeftHeaderPicture或是(RightHeaderPicture,CenterHeaderPicture)插入圖片路徑
然後指定要呈現的內容是圖片的格式,編碼為&G表示圖片
然後插入頁首頁尾的畫面就會如上圖片一樣
如果你希望指定插入的圖片大小,可以在另外設定寬高:
currentSheetPageSetup.LeftHeaderPicture.LockAspectRatio = Office.MsoTriState.msoTrue;
currentSheetPageSetup.LeftHeaderPicture.Width = 640;
currentSheetPageSetup.LeftHeaderPicture.Height = 480;
順道一提:額外設定寬高但是這種設定方式是把你原先插入的圖片做縮放。
透過頁首頁尾的方式插入浮水印後,再轉成PDF文件或是列印都可以把浮水印列印出來,如下:
備註一下,頁首頁尾插入的內容可以有很多種格式,格式的部分,可以參考
官方的Format Code去做嘗試。
但是此方式在平常編輯Excel文件時,也就是使用「標準模式」時並不會有浮水印,那要如何會有浮水印呢?
背景圖片插入
只要透過背景圖片插入便可以模擬出這種結果,但是要注意一下兩點;
1. 背景的方式插入,再列印或是轉PDF時是不會產生出來的!
2. 因為標準模式會無限延伸,所以浮水印的圖片也會無限延伸。
插入的程式如下:
workSheet.SetBackgroundPicture("your picture path");
直接對當前的Sheet插入圖片
結果畫面:
所以我在處理這部分,我是背景的浮水印與頁首頁尾插入的浮水印圖片分開產生,不過頁首頁尾浮水印的圖片還會受到版面設定的影響…
結論
但是這樣就解決浮水印了嗎?
其實不是…透過頁首頁尾的方式插入浮水印時,還會遇到下列問題
1. 頁首頁尾的類型,你的頁首頁尾是奇偶頁?第一頁首頁尾?還是一般頁首頁尾?
如果沒有指定,當你讀取到的檔案是非一般也首頁尾時,是插入不了浮水印的。因此開啟時,如果是奇偶頁或第一頁首頁尾的頁面,不會有浮水印..
2. 版面設定影響會選浮水印圖像:
如果你希望浮水印的大小是跟著Excel的紙張大小,那你還會遇到很多問題要處理…
如你希望浮水印圖片滿版,假設今天的情況一般是在列印時,預設指定為A4大小紙張,但若是哪天拿到的文件是A3時? 或是紙張改成橫向時,就無法產生對應的浮水印大小圖片了,因此我們會需要另外偵測Excel的紙張大小(列印時)
3. 同2,為衍伸的問題,紙張大小如果改變縮放比例,或是調整為符合N頁寬、N頁高時,原先浮水印的圖片大小也會跑掉
不過至少這篇還是希望對有需要的人不管是浮水印還是插入圖片有幫助
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)
另外要轉載請附上出處 感謝