购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 使用Excelize读取电子表格文档

使用Excelize创建电子表格文档后,我们使用Excelize基础库来读取刚刚生成的Book1.xlsx工作簿。对2.5节中的main()函数稍加修改,修改后的代码如下:

func main() {
    f, err :=excelize.OpenFile("Book1.xlsx")
    if err !=nil {
        fmt.Println(err)
        return
    }
    defer func() {
        if err :=f.Close(); err !=nil {
            fmt.Println(err)
        }
    }()
    value, err :=f.GetCellValue("Sheet1", "B2")
    if err !=nil {
        fmt.Println(err)
        return
    }
    fmt.Println(value)
}

这段代码包含不少新内容,我们来逐行分析。为了打开名为Book1.xlsx的工作簿,使用Excelize基础库的OpenFile()函数,它有两个返回值,定义并使用变量f接收该函数的第一个excelize.File指针类型的返回值,代表已打开的文件对象;同时定义err变量接收该函数的第二个 error 类型的返回值,代表打开文档时可能出现的异常。通常在接收到 error 类型的返回值后,需要判断其是否为零值(nil)。若出现异常,则将异常信息通过fmt标准库输出,并使用return关键字结束main()函数后续的代码运行,退出程序;若未出现异常,则继续运行后续代码。

使用defer关键字定义延迟处理匿名函数,在这个延迟处理匿名函数中调用对象f的类型方法Close()函数来关闭打开的工作簿。试想一下,使用Excelize打开工作簿后,程序的其余部分存在多处有可能出现异常的位置,我们若要在任何异常出现时立即关闭工作簿并终止后续代码的运行,则需要在每个判断异常的位置编写关闭工作簿的代码。使用延迟处理匿名函数可以减少重复编写这部分代码的工作,该函数将在return语句之前自动运行。

GetCellValue()函数通过指定的工作表名称Sheet1和单元格坐标B2来读取工作表中单元格的值。GetCellValue()函数有两个返回值,分别为单元格的值和可能出现的异常,需要注意的是,Excelize将以字符串类型表示读取到的单元格的值,使用变量value和err接收这两个返回值,然后检查是否存在异常,若存在异常,则输出异常信息,并使用return语句终止程序。由于这段程序使用延迟处理匿名函数关闭工作簿,在此处出现异常导致程序终止前,工作簿将会关闭;若读取单元格时一切正常,在main()函数的末尾会输出读取到的值。

保存文件并回到命令行界面,执行如下命令来编译和运行刚刚编写的文件:

$ go run main.go

假如一切顺利,你将在命令行界面中看到输出“Hello, world!”字符串结果。这正是我们在2.5节创建的电子表格文档的Sheet1工作表的B2单元格的值。现在,你已经可以使用Excelize来设置和读取单元格的数据了。作为练习,你还可以尝试一下改变坐标,修改不同单元格的值。 Q9Ks2tLEmy1i+ajJHPTzVXOlOPBFZtvSBKE3+atke7+RP9qImTPogQOKfkgcqHhW

点击中间区域
呼出菜单
上一章
目录
下一章
×