安装Excelize后,我们需要创建一个名为main.go的源文件。Go语言文件的命名总是以go扩展名结尾。如果你想在文件名中使用多个单词,那么可以使用下画线来隔开它们。例如,建议使用excelize_app.go作为文件名,而不是excelizeapp.go。
现在,打开刚刚创建的main.go文件,并输入如下示例代码:
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f :=excelize.NewFile()
err :=f.SetCellValue("Sheet1", "B2", "Hello, world!")
if err !=nil {
fmt.Println(err)
}
if err :=f.SaveAs("Book1.xlsx"); err !=nil {
fmt.Println(err)
}
if err :=f.Close(); err !=nil {
fmt.Println(err)
}
}
如果使用GOPATH模式进行软件包管理,需要将上述代码中的github.com/xuri/excelize/v2替换为github.com/xuri/excelize。本书后续章节将默认以Go Module模式进行软件包管理。保存文件并回到命令行界面,通过如下命令来尝试编译并运行main.go文件:
$ go run main.go
程序运行完毕后,打开程序运行文件夹my_app,你应该能看到文件夹中出现了一个名为Book1.xlsx的工作簿。假如一切顺利,那么恭喜你!你完成了第一个Excelize程序的编写,并使用Excelize成功生成了一份电子表格文档!现在,让我们剖析一下这个程序。
首先,作为一个标准的Go程序,声明了包名称为main,通过import关键字导入了fmt标准库和Excelize基础库。
其次,声明了main()函数,它是Go程序的入口。因为我们此前已经安装并导入了Excelize基础库,程序中可以使用excelize访问Excelize基础库中的函数,例如使用excelize.NewFile()让Excelize创建一个新的文件(工作簿),该函数返回一个对象,我们定义变量f来存储这个返回对象。
再次,对象f的数据类型为*excelize.File,该类型绑定了用于操作电子表格文档的一系列函数(方法),上述代码使用了SetCellValue()这个函数。从名字就能看出它是用来为单元格赋值的函数,它有3个形参:工作表名称、单元格坐标和单元格的值。在这个例子中,我们把名称为Sheet1的工作表的B2单元格的值设置为“Hello, world!”,因为在使用Excelize创建工作簿时,默认将创建一个名为Sheet1的工作表,所以这里我们可以直接使用该工作表名称,而无须先创建名称为Sheet1的工作表。SetCellValue()函数有一个 error 类型的返回值,代表在单元格赋值过程中可能出现的异常,定义名为err的变量接收该返回值,并对其进行检查。为了保障程序的可靠性,我们建议对程序中Excelize返回的所有error 类型的值都进行及时的接收和检查,并做适当的处理。
接着,调用对象f的另存为函数SaveAs(),将工作簿以Book1.xlsx为文件名保存在项目文件夹中。SaveAs()函数也有一个 error 类型的返回值,代表保存文档时可能出现的异常,定义名为err的变量接收这个返回值,并检查其是否为零值(nil),出现异常时使用fmt标准库的Println()函数输出异常信息。
最后,调用对象f的类型方法Close()函数,关闭工作簿。
运行这个完整的程序,若没有任何输出,代表所有函数都能够正确运行。打开电子表格应用程序看一下 Excelize 为我们生成的电子表格文档吧,如图2-1所示。
图2-1 由Excelize生成的电子表格文档
可以看到,正如预期的那样,在名为Sheet1的工作表中,B2单元格的值已经被设置为“Hello, world!”。
刚刚我们通过执行go run main.go命令来生成电子表格文档,其中包含编译与运行两个步骤,下面我们将这两个步骤分开讨论。
在命令行界面中执行如下命令来编译源文件:
$ go build
编译结束后将在项目文件夹中生成一个可执行文件。在Linux以及macOS操作系统中,会生成与项目文件夹同名的可执行文件my_app,现在,我们可以通过如下方式运行该可执行文件:
$./my_app
在Windows操作系统中将生成名为my_app.exe的可执行文件,在命令行界面中通过如下方式来运行它:
>.\my_app.exe
不同于动态语言,Go是一种编译型语言,这意味着你可以把编译后的可执行文件交付于其他人,将其运行在没有搭建Go语言开发环境的环境中。Go还支持跨平台交叉编译,假如你正在使用macOS操作系统进行开发,那么可以通过如下命令将程序编译为支持x86处理器架构的Linux 64位操作系统使用的可执行文件:
$ GOOS=linux GOARCH=amd64 go build
环境变量GOOS和GOARCH分别代表支持的目标操作系统和处理器架构。使用Excelize基础库不要求开发环境或运行时环境中预装任何一种电子表格应用,这意味着你可以在不依赖Excel或其他电子表格应用的情况下,跨平台地处理电子表格文档。