package excel import ( "electricity_bill_calc/model" "io" "github.com/xuri/excelize/v2" ) type MeterNonPVExcelTemplateGenerator struct { file *excelize.File } // 生成峰谷计量抄表Excel模板 func NewMeterNonPVExcelTemplateGenerator() *MeterNonPVExcelTemplateGenerator { return &MeterNonPVExcelTemplateGenerator{ file: excelize.NewFile(), } } func (MeterNonPVExcelTemplateGenerator) titles() []interface{} { return []interface{}{ "序号", "用户名称", "户址", "电表编号", "倍率", "上期表底(总)", "本期表底(总)", "退补电量(总)", } } func (t *MeterNonPVExcelTemplateGenerator) Close() { t.file.Close() } func (t MeterNonPVExcelTemplateGenerator) WriteTo(w io.Writer) (int64, error) { return t.file.WriteTo(w) } func (t *MeterNonPVExcelTemplateGenerator) WriteMeterData(meters []model.EndUserDetail) error { defaultSheet := t.file.GetSheetName(0) stream, err := t.file.NewStreamWriter(defaultSheet) if err != nil { return err } firstCell, err := excelize.CoordinatesToCellName(1, 1) if err != nil { return err } stream.SetColWidth(2, 4, 20) stream.SetColWidth(6, 8, 15) stream.SetRow(firstCell, t.titles(), excelize.RowOpts{Height: 20}) for index, meter := range meters { firstCell, err := excelize.CoordinatesToCellName(1, index+2) if err != nil { return err } customerName := "" if meter.CustomerName != nil { customerName = *meter.CustomerName } customerAddress := "" if meter.Address != nil { customerAddress = *meter.Address } if err = stream.SetRow( firstCell, []interface{}{ meter.Seq, customerName, customerAddress, meter.MeterId, meter.Ratio, meter.LastPeriodOverall, meter.CurrentPeriodOverall, meter.AdjustOverall, }, excelize.RowOpts{Height: 15}, ); err != nil { return err } } if err = stream.Flush(); err != nil { return err } return nil }