本文繼續(xù)介紹Gox語言中如何利用內(nèi)置的github.com/360EntSecGroup-Skylar/excelize包來實(shí)現(xiàn)Excel文件的操作,例子中演示的是如何將Excel文件自動(dòng)轉(zhuǎn)換為CSV格式的文件谜慌。CSV文件其實(shí)是一種固定格式的純文本文件脑题,比較方便一般的計(jì)算機(jī)程序化處理面粮。例子代碼可以對含有單表或者多表的Excel文件進(jìn)行轉(zhuǎn)換,多表的情況下會將各個(gè)表分別保存為按數(shù)字排序的多個(gè)CSV文件,這比在Excel文件中手動(dòng)另存為CSV文件時(shí)要方便得多。另外文兑,稍加改進(jìn)后,還可以批量進(jìn)行Excel文件的轉(zhuǎn)換腺劣。
下面就是這段代碼绿贞,非常簡單,也有詳盡的注釋橘原。
// 設(shè)置github.com/360EntSecGroup-Skylar/excelize包的簡稱
excel = github_360EntSecGroupSkylar_excelize
// 從命令行獲取要轉(zhuǎn)換的Excel文件名
fileNameT = getParameter(argsG, 1, "")
if fileNameT == "" {
pl("not enough parameters")
exit()
}
// 打開該Excel文件
f, errT = excel.OpenFile(fileNameT)
checkError(errT)
// 獲取文件內(nèi)所有的表(sheet)
// 結(jié)果是一個(gè)[]string字符串?dāng)?shù)組籍铁,里面是各個(gè)表的名稱
sheets = f.GetSheetList()
// 獲取表的個(gè)數(shù)
lenT = len(sheets)
// 如果只有一個(gè)表,則轉(zhuǎn)換為原文件名+“.csv”的新文件名
if lenT <= 1 {
// 獲取第一個(gè)表中所有的內(nèi)容(行列)
rowsT, errT = f.GetRows(sheets[0])
checkError(errT)
// 獲取第一個(gè)表中所有的內(nèi)容(行列)
of, err = os.Create(fileNameT+".csv")
checkError(err)
// 確保關(guān)閉輸出文件
defer of.Close()
// 用Go語言encoding/csv標(biāo)準(zhǔn)包新建csv的writer
w = encoding_csv.NewWriter(of)
// 寫入所有行
w.WriteAll(rowsT)
// 檢查是否有錯(cuò)誤
errT = w.Error()
// 有錯(cuò)誤的話輸出錯(cuò)誤信息并終止程序運(yùn)行
checkErrf("failed to write output csv file: %v", errT)
} else { // 否則轉(zhuǎn)換為帶數(shù)字序號的幾個(gè)csv文件趾断,每個(gè)文件對應(yīng)一個(gè)Excel文件中的表
// saveCSV函數(shù)用于將Excel文件中序號為idxA的表存入csv文件
// 寫入csv的方法與上面的基本一致
func saveCSV(idxA) {
rowsT, errT = f.GetRows(sheets[idxA])
checkError(errT)
of, err = os.Create(sprintf("%v_%d.csv", fileNameT, idxA+1))
checkError(err)
defer of.Close()
w = encoding_csv.NewWriter(of)
w.WriteAll(rowsT)
errT = w.Error()
checkErrf("failed to write output csv file: %v", errT)
}
// 循環(huán)將所有表都轉(zhuǎn)換成csv文件
for i, _ = range sheets {
saveCSV(i)
}
}
注意:
Gox語言是脫胎于Go語言(Golang)的開源腳本語言拒名,解釋執(zhí)行,但相比Go語言更貼近高級語言芋酌,語法硬性限制也少一些增显;是一門偏向快速應(yīng)用的語言,也可以說是一個(gè)集成工具脐帝;
-
Gox語言主要優(yōu)勢有三點(diǎn):
- 第一同云,Gox語言本身只有一個(gè)可執(zhí)行文件,綠色免配置腮恩,下載即可使用,無需安裝Go語言環(huán)境温兼,無需編譯秸滴,非常適合快速制作原型以及云服務(wù)器上的遠(yuǎn)程開發(fā);
- 第二募判,Gox中可以直接使用絕大多數(shù)Go語言標(biāo)準(zhǔn)庫中的對象和方法函數(shù)荡含,也內(nèi)置了很多常用、優(yōu)秀的第三方庫届垫,充分發(fā)揮Go語言多年積累的資源優(yōu)勢释液;
- 第三,與很多其他主流語言不同装处,Gox語言著力解決了GUI圖形界面編程的問題误债,內(nèi)置了基于Giu(imgui)浸船、LCL、Sciter的三套圖形界面編程庫寝蹈,直接可以進(jìn)行快捷高效的圖形界面開發(fā)(LCL李命、Sciter只需分別下載一個(gè)動(dòng)態(tài)鏈接庫文件,執(zhí)行和分發(fā)時(shí)附帶上即可)箫老,特別適合編寫演示原型系統(tǒng)封字。
作為腳本語言,Gox語言性能肯定不如Go語言這樣的編譯型語言快耍鬓,但由于Gox語言與Go語言的緊密聯(lián)系阔籽,Gox語言編寫的腳本可以很容易的改寫成Go語言代碼,編譯執(zhí)行后就可以發(fā)揮Go語言的速度優(yōu)勢了牲蜀。因此笆制,Gox語言也比較適合做初期的Go語言調(diào)試,還有一個(gè)更直接的方式是使用Gotx(在Gox官網(wǎng)上也有下載)各薇,這是使用完全和Go語言一樣語法的解釋器项贺,可以理解成集成了Go語言標(biāo)準(zhǔn)庫和不少第三方庫的解釋執(zhí)行的Go語言,一樣也不需要搭建Go語言環(huán)境峭判。Gotx與Gox的區(qū)別在于开缎,Gotx仍然遵循Go語言的文法,代碼相對復(fù)雜一些林螃,限制也多一些奕删,但改寫回Go語言準(zhǔn)備編譯執(zhí)行時(shí),基本上沒有成本疗认。
Gox的官網(wǎng)在這里完残,也可以在瀏覽器搜索引擎中直接搜索“gox語言”,Github頁面在這里横漏,在這里可以看到很多Gox語言的學(xué)習(xí)指南和實(shí)際應(yīng)用實(shí)例谨设。