26

Gox语言自动转换Excel文件为CSV格式-GX35.2

 3 years ago
source link: https://studygolang.com/articles/29814
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文继续介绍Gox语言中如何利用内置的github.com/360EntSecGroup-Skylar/excelize包来实现Excel文件的操作,例子中演示的是如何将Excel文件自动转换为CSV格式的文件。CSV文件其实是一种固定格式的纯文本文件,比较方便一般的计算机程序化处理。例子代码可以对含有单表或者多表的Excel文件进行转换,多表的情况下会将各个表分别保存为按数字排序的多个CSV文件,这比在Excel文件中手动另存为CSV文件时要方便得多。另外,稍加改进后,还可以批量进行Excel文件的转换。

下面就是这段代码,非常简单,也有详尽的注释。

// 设置github.com/360EntSecGroup-Skylar/excelize包的简称
excel = github_360EntSecGroupSkylar_excelize

// 从命令行获取要转换的Excel文件名
fileNameT = getParameter(argsG, 1, "")

if fileNameT == "" {
    pl("not enough parameters")
    exit()
}

// 打开该Excel文件
f, errT = excel.OpenFile(fileNameT)
checkError(errT)

// 获取文件内所有的表(sheet)
// 结果是一个[]string字符串数组,里面是各个表的名称
sheets = f.GetSheetList()

// 获取表的个数
lenT = len(sheets)

// 如果只有一个表,则转换为原文件名+“.csv”的新文件名
if lenT <= 1 {
    // 获取第一个表中所有的内容(行列)
    rowsT, errT = f.GetRows(sheets[0])
    checkError(errT)

    // 获取第一个表中所有的内容(行列)
    of, err = os.Create(fileNameT+".csv")
    checkError(err)

    // 确保关闭输出文件
    defer of.Close()

    // 用Go语言encoding/csv标准包新建csv的writer
    w = encoding_csv.NewWriter(of)

    // 写入所有行
    w.WriteAll(rowsT)

    // 检查是否有错误
    errT = w.Error()

    // 有错误的话输出错误信息并终止程序运行
    checkErrf("failed to write output csv file: %v", errT)
    
} else { // 否则转换为带数字序号的几个csv文件,每个文件对应一个Excel文件中的表

    // saveCSV函数用于将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)
    }
    
    // 循环将所有表都转换成csv文件
    for i, _ = range sheets {
        saveCSV(i)
    }

}

注意:

  • Gox语言是脱胎于Go语言(Golang)的开源脚本语言,解释执行,但相比Go语言更贴近高级语言,语法硬性限制也少一些;是一门偏向快速应用的语言,也可以说是一个集成工具;

  • Gox语言主要优势有三点:

    • 第一,Gox语言本身只有一个可执行文件,绿色免配置,下载即可使用,无需安装Go语言环境,无需编译,非常适合快速制作原型以及云服务器上的远程开发;
    • 第二,Gox中可以直接使用绝大多数Go语言标准库中的对象和方法函数,也内置了很多常用、优秀的第三方库,充分发挥Go语言多年积累的资源优势;
    • 第三,与很多其他主流语言不同,Gox语言着力解决了GUI图形界面编程的问题,内置了基于Giu(imgui)、LCL、Sciter的三套图形界面编程库,直接可以进行快捷高效的图形界面开发(LCL、Sciter只需分别下载一个动态链接库文件,执行和分发时附带上即可),特别适合编写演示原型系统。

作为脚本语言,Gox语言性能肯定不如Go语言这样的编译型语言快,但由于Gox语言与Go语言的紧密联系,Gox语言编写的脚本可以很容易的改写成Go语言代码,编译执行后就可以发挥Go语言的速度优势了。因此,Gox语言也比较适合做初期的Go语言调试,还有一个更直接的方式是使用 Gotx (在Gox官网上也有下载),这是使用完全和Go语言一样语法的解释器,可以理解成集成了Go语言标准库和不少第三方库的解释执行的Go语言,一样也不需要搭建Go语言环境。Gotx与Gox的区别在于,Gotx仍然遵循Go语言的文法,代码相对复杂一些,限制也多一些,但改写回Go语言准备编译执行时,基本上没有成本。

Gox的官网在 这里 ,也可以在浏览器搜索引擎中直接搜索“gox语言”,Github页面在 这里 ,在 这里 可以看到很多Gox语言的学习指南和实际应用实例。

欢迎关注我们的微信公众号,每天学习Go知识

FveQFjN.jpg!web

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK