xls vs xlsx a year ago
xls是什么文件格式?
- 1.xls其实就是Microsoft Excel工作表,属于一种经常使用的电子表格文件格式。作为Excel 2003及以前版本生成的文件格式,是一个特有的二进制格式,而它的核心结构是复合文档类型的结构。
- 2.xls文件通常可以使用Microsoft Excel打开,另外微软为那些没有安装Excel的用户开发了专门的查看器Excel Viewer。使用金山WPS也可以打开、操作xls文件。
- 3.使用Microsoft Excel可以将xls格式的表格转换为多种格式:XML表格、XML数据、网页、使用制表符分割的文本文件(.txt)、使用逗号分隔的文本文件(.csv)等。
xlsx和xls有什么区别?
- 1.文件格式不同:xls是一个特有的二进制格式,其核心结构是复合文档类型的结构,而xlsx的核心结构是XML类型的结构,采用的是基于 XML 的压缩方式,使其占用的空间更小。xlsx 中最后一个 x 的意义就在于此。
- 2.版本不同:xls是excel2003及以前版本生成的文件格式,而xlsx是excel2007及以后版本生成的文件格式。
- 3.兼容性不同:xlsx格式是向下兼容的,可兼容xls格式。
golang如何读写xls
xls文件比较特殊,是一种很古老excel表格格式
不同于xlsx xlsm,很多开源库都不支持xls, 比如说 excelize 就有如下明确说明:
所以要读写xls需要特殊的库
方案1-shakinm/xlsReader
package main
import (
"fmt"
"github.com/shakinm/xlsReader/xls"
"log"
)
func main() {
workbook, err := xls.OpenFile("small_1_sheet.xls")
if err!=nil {
log.Panic(err.Error())
}
// Кол-во листов в книге
// Number of sheets in the workbook
//
// for i := 0; i <= workbook.GetNumberSheets()-1; i++ {}
fmt.Println(workbook.GetNumberSheets())
sheet, err := workbook.GetSheet(0)
if err!=nil {
log.Panic(err.Error())
}
// Имя листа
// Print sheet name
println(sheet.GetName())
// Вывести кол-во строк в листе
// Print the number of rows in the sheet
println(sheet.GetNumberRows())
for i := 0; i <= sheet.GetNumberRows(); i++ {
if row, err := sheet.GetRow(i); err == nil {
if cell, err := row.GetCol(1); err == nil {
// Значение ячейки, тип строка
// Cell value, string type
fmt.Println(cell.GetString())
//fmt.Println(cell.GetInt64())
//fmt.Println(cell.GetFloat64())
// Тип ячейки (записи)
// Cell type (records)
fmt.Println(cell.GetType())
// Получение отформатированной строки, например для ячеек с датой или проценты
// Receiving a formatted string, for example, for cells with a date or a percentage
xfIndex:=cell.GetXFIndex()
formatIndex:=workbook.GetXFbyIndex(xfIndex)
format:=workbook.GetFormatByIndex(formatIndex.GetFormatIndex())
fmt.Println(format.GetFormatString(cell))
}
}
}
}
最近写了个处理proofHQ comment的项目:https://gitlab.scott-xiong.com/scott-x/ExtractPHQCommentToText/-/blob/main/main.go
方案2-extrame/xls
之前已经做过封装了, 详情:https://github.com/scott-x/gutils/tree/master/excel
golang如何读写xlsx
1, 读
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f, err := excelize.OpenFile("Book1.xlsx")
if err != nil {
fmt.Println(err)
return
}
defer func() {
// Close the spreadsheet.
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// Get value from cell by given worksheet name and cell reference.
cell, err := f.GetCellValue("Sheet1", "B2")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(cell)
// Get all the rows in the Sheet1.
rows, err := f.GetRows("Sheet1")
if err != nil {
fmt.Println(err)
return
}
for _, row := range rows {
for _, colCell := range row {
fmt.Print(colCell, "\t")
}
fmt.Println()
}
}
实际案例:提取wmt sku list关键信息,导入数据库 https://gitlab.scott-xiong.com/scott-x/sku/-/blob/main/main.go
2, 写
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f := excelize.NewFile()
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
// Create a new sheet.
index, err := f.NewSheet("Sheet2")
if err != nil {
fmt.Println(err)
return
}
// Set value of a cell.
f.SetCellValue("Sheet2", "A2", "Hello world.")
f.SetCellValue("Sheet1", "B2", 100)
// Set active sheet of the workbook.
f.SetActiveSheet(index)
// Save spreadsheet by the given path.
if err := f.SaveAs("Book1.xlsx"); err != nil {
fmt.Println(err)
}
}