我github.com/xuri/excelize/v2用來處理excel文件。我將許多 excel 文件中的許多表附加到一張 excel 中的一張表中。下面是示例代碼。 var mergedRows [][]string for _, f := range files { excelPath := folder + "/" + f.Name() rows := loadXlsx(excelPath, sheetName) for _, row := range rows[rowOffset:] { mergedRows = append(mergedRows, row) } } saveXlsx(aggregatedFilePath, sheetName, mergedRows, rowOffset)...func loadXlsx(xlsxPath string, sheetName string) [][]string { f, err := excelize.OpenFile(xlsxPath) if err != nil { log.Fatal(err) } defer func() { if err := f.Close(); err != nil{ fmt.Println(err) } }() rows, err := f.GetRows(sheetName) if err != nil { log.Fatal(err) } return rows}func saveXlsx(path string, sheetName string, rows [][]string, rowOffset int) { f, err := excelize.OpenFile(path) if err != nil { log.Fatal(err) } defer func() { if err := f.Close(); err != nil{ fmt.Println(err) } }() index := f.GetSheetIndex(sheetName) offset := 1 sequence := 1 for _, row := range rows{ row[0] = strconv.Itoa(sequence) sequence = sequence + 1 offset = offset + 1 axis := "A" + strconv.Itoa(offset) f.SetSheetRow(sheetName, axis, &row) } for index, _ := range rows[0] { axis, _ := excelize.CoordinatesToCellName(index, 2) column, _ := excelize.ColumnNumberToName(index) styleId, _ := f.GetCellStyle(sheetName, axis) cellType, _ := f.GetCellType(sheetName, axis) fmt.Println(styleId) fmt.Println(cellType) f.SetColStyle(sheetName, column, styleId) } f.SetActiveSheet(index) if err := f.Save(); err != nil { fmt.Println(err) }}這有效,除了一些數(shù)據(jù)格式問題。數(shù)字的樣式被復(fù)制,但不起作用;日期已復(fù)制,但值錯誤。在源文件中,有一些數(shù)字采用 2 位小數(shù)格式并顯示為70.12,而在輸出文件中格式相同但顯示為70.119。在源文件中,有一些 Y/m/d 格式的日期顯示為2022/1/12,而在輸出文件中格式相同但顯示為01-12-22.
1 回答
當(dāng)年話下
TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個贊
從手冊
func (f *File) GetRows(sheet string, opts ...Options) ([][]string, error)
如果單元格格式可以應(yīng)用于單元格的值,將使用應(yīng)用的值,否則將使用原始值。
所以在我的問題中,rows, err := f.GetRows(sheetName)將復(fù)制帶有格式的日期和數(shù)字值,而不是原始數(shù)字。格式化值可能會轉(zhuǎn)換為非等值。
解決方案只是使用RawCellValue選項(xiàng)讀取原始值true,
rows, err := f.GetRows(sheetName, excelize.Options{RawCellValue:true})如果格式發(fā)生變化,只需將原始文件的樣式應(yīng)用到新文件即可。
- 1 回答
- 0 關(guān)注
- 389 瀏覽
添加回答
舉報
0/150
提交
取消
