Go語言操作excel
阿新 • • 發佈:2018-12-20
圖片儲存,excel表格安裝dpi為120儲存的
dpi:每英寸佔用的畫素個數
舉例:
本地圖片 畫素為500,dpi為96, 以計算單位為基準 在excel中的畫素就是 (500/96*120),保證計算單位相同。
1英寸=畫素/dpi
1磅=(畫素-7)/9
1字元=畫素*0.6
1英寸=2.54cm
1釐米(cm)= 0.394英寸(in)
行高 單位(磅)
列寬 單位(字元)
舉例: 表格的單元格的大小為 2英寸2英寸 =》 2120=240 =》 行高=(240-7)/9=25.9(取大25.888取25.9) 列寬=240*0.6=144
照片: 410*541 畫素 72*72dpi 寬 410/72=5.7 in=14.48 cm 高 541/72=7.52 in=19.11 cm 縮小: 寬 2/(410/72)=72*2/410=0.352-0.01=0.35 高 2/(541/72)=72*2/541=0.267-0.01=0.26 去兩位會自動從第三位進1,需要減掉 取最小的,等比縮放 0.26/0.75 ????為什麼除以0.75
程式碼:
package main import ( "fmt" _ "image/gif" _ "image/jpeg" _ "image/png" "os" "github.com/360EntSecGroup-Skylar/excelize" "image" "strconv" ) func main() { changepwd() create() creatimg() } func creatimg(){ filepath:="3.jpg" xlsx, err := excelize.OpenFile("Book1.xlsx") if err != nil { fmt.Println(err) return } f,err:=os.Open(filepath) if err!=nil{ fmt.Println("open:",err) return } defer f.Close() img,str,err:=image.DecodeConfig(f) if err!=nil{ fmt.Println("DecodeConfig:",err) return } fmt.Println("str:",str) fmt.Println(img.Width) fmt.Println(img.Height) //畫素(x) dpi(d) 英寸(y) y=x/dpi cm=y*2.54 2=144/72 //行高 磅=(x-7)/9 //列寬 字元=x*0.6 5/3 imgdpi:=72.00 exceldpi:=120.00 cellpixel:=2.00 var pixel float64=exceldpi*cellpixel//2英寸 5.08 (excel以120為dpi,dpi為72的畫素存入execl 畫素需要*120/72 相當於變成了原來的1.25倍) w:=(pixel-7)/9+0.78+0.01//單元格稍大一點 h:=pixel*0.6+0.01//單元格稍大一點 fmt.Println("img.Width:",img.Width) fmt.Println("img.Height:",img.Height) fmt.Println("w:",w) fmt.Println("h:",h) xlsx.SetColWidth("Sheet1", "A","A",w) xlsx.SetRowHeight("Sheet1", 1,h) err = xlsx.Save() if err != nil { fmt.Println(err) } size:=float64(img.Width)//畫素 if img.Height>img.Width{ size = float64(img.Height) } multiple:=imgdpi*cellpixel/size-0.01 multiplestr:=strconv.FormatFloat(multiple/0.75,'f',3,64) fmt.Println("multiplex:",multiplestr) //插入圖片 //err = xlsx.AddPicture("Sheet1", "A1", "./1.jpeg", `{"positioning": "oneCell"}`) optstr:=`{"x_scale": `+multiplestr+`, "y_scale": `+multiplestr+`,"lock_aspect_ratio":true}` err = xlsx.AddPicture("Sheet1", "A1", filepath, optstr) fmt.Println("optstr:",optstr) if err != nil { fmt.Println(err) } //// 在工作表中插入圖片,並設定圖片的縮放比例 //err = xlsx.AddPicture("Sheet1", "D2", "./1.jpeg", `{"x_scale": 0.5, "y_scale": 0.5}`) //if err != nil { // fmt.Println(err) //} //// 在工作表中插入圖片,並設定圖片的列印屬性 //err = xlsx.AddPicture("Sheet1", "H2", "./1.jpeg", `{"x_offset": 15, "y_offset": 10, "print_obj": true, "lock_aspect_ratio": false, "locked": false}`) //if err != nil { // fmt.Println(err) //} // 儲存檔案 err = xlsx.Save() if err != nil { fmt.Println(err) } } func read(){ xlsx, err := excelize.OpenFile("./Book1.xlsx") if err != nil { fmt.Println(err) return } // 獲取工作表中指定單元格的值 xlsx.SetColWidth("Sheet1", "B","B",28) cell := xlsx.GetColWidth("Sheet1", "A") fmt.Println(cell)// 列寬磅 64 8.11 如果不修改則返回64 cell2 := xlsx.GetRowHeight("Sheet1", 1) fmt.Println(cell2)//行高 字元 20 13.8 } func create(){ xlsx := excelize.NewFile() // 建立一個工作表 //index := xlsx.NewSheet("Sheet2") // 設定單元格的值 xlsx.SetCellValue("Sheet1", "B2", 100) // 設定工作簿的預設工作表 //xlsx.SetActiveSheet(index) // 根據指定路徑儲存檔案 err := xlsx.SaveAs("./Book1.xlsx") if err != nil { fmt.Println(err) } } func changepwd(){ path:=`G:\gopath\src\github.com\Intelligentvision\test\pkg\excel` fmt.Println(os.Getwd())//返回當前路徑 if err:=os.Chdir(path);err!=nil{ //修改工作路徑到指定路徑 fmt.Println(err) return }else{ fmt.Println(os.Getwd())//返回當前路徑 } }