From db650cdaa926e331fda70d629736dcb87f7f211d Mon Sep 17 00:00:00 2001 From: nuknal Date: Tue, 21 May 2024 17:41:00 +0800 Subject: [PATCH] xlsx --- extract/aux.go | 25 +-- extract/aux_ebox.go | 96 ++++++++--- extract/aux_elements.go | 25 +-- extract/aux_head.go | 26 +-- extract/aux_platform.go | 354 +++++++++++++++++++++++++++++++++++++++- go.mod | 10 +- go.sum | 23 ++- 7 files changed, 487 insertions(+), 72 deletions(-) diff --git a/extract/aux.go b/extract/aux.go index e643f32..312465b 100644 --- a/extract/aux.go +++ b/extract/aux.go @@ -4,20 +4,21 @@ import ( "os" log "github.com/sirupsen/logrus" - "github.com/tealeg/xlsx" + "github.com/xuri/excelize/v2" ) func (e Extractor) ExtractAux(auxfile, xlsxfile string) error { - if err := createAuxXlxs(xlsxfile); err != nil { + os.Remove(xlsxfile) + if err := createAuxXlsx(xlsxfile); err != nil { return err } - wb, err := xlsx.OpenFile(xlsxfile) + f, err := excelize.OpenFile(xlsxfile) if err != nil { - panic(err) + return err } - sh := wb.Sheets[0] + defer f.Close() data, err := os.ReadFile(auxfile) if err != nil { @@ -25,21 +26,23 @@ func (e Extractor) ExtractAux(auxfile, xlsxfile string) error { return err } + row := 2 + col := 1 for i := 0; i < len(data); i += 24 + 128 + 512 { - row := sh.AddRow() - var head AuxFrameHead head.Decode(data[i : i+24]) - head.SaveXlsx(row) + l0, _ := head.SaveXlsx(f, col, row) var box AuxFocalBox box.Decode(data[i+24 : i+24+128]) - box.SaveXlsx(row) + l1, _ := box.SaveXlsx(f, col+l0, row) var plat AuxPlatform plat.Decode(data[i+24+128 : i+24+128+512]) - box.SaveXlsx(row) + plat.SaveXlsx(f, col+l0+l1, row) + + row++ } - return nil + return f.Save() } diff --git a/extract/aux_ebox.go b/extract/aux_ebox.go index 13dc718..6116f6f 100644 --- a/extract/aux_ebox.go +++ b/extract/aux_ebox.go @@ -2,11 +2,9 @@ package extract import ( "fmt" - "os" "github.com/k0kubun/pp/v3" - "github.com/sirupsen/logrus" - "github.com/tealeg/xlsx" + "github.com/xuri/excelize/v2" ) // 卫星时间起点 北京时间 2000-01-01 20:00:00 @@ -141,27 +139,79 @@ func (ab AuxFocalBox) PGAGainValue() string { } } -func (ab AuxFocalBox) SaveXlsx(row *xlsx.Row) error { - return nil -} - -func (e *Extractor) ParseAuxEBox(auxfile string) ([]*AuxFocalBox, error) { - data, err := os.ReadFile(auxfile) - if err != nil { - logrus.Println("read aux data from", auxfile, "error:", err.Error()) - return nil, err +func (ab AuxFocalBox) SaveXlsx(f *excelize.File, col, row int) (int, error) { + values := []interface{}{ + ab.TransferTime, + ab.TrainingDone, + ab.WorkMode, + ab.IntegralDirection, + ab.PGAGain, + ab.PIntegrationLevel, + ab.B1IntegrationLevel, + ab.B2IntegrationLevel, + ab.B3IntegrationLevel, + ab.B4IntegrationLevel, + ab.SecPluseState, + "", + ab.DarkFieldBias, + ab.PWinAddr, + ab.B1WinAddr, + ab.B2WinAddr, + ab.B3WinAddr, + ab.B4WinAddr, + "面阵模式Linetime时钟周期数", + "面阵模式开窗地址", + "面阵模式开窗大小", + "面阵曝光时间粗调EXP_C", + "面阵曝光时间精调EXP_F", + "面阵模式最小读出行", + "硬盘1温度", + "硬盘2温度", + "保留", + "传感器温度", + "FPGA逻辑版本号", + ab.CCDWorkMode, + ab.RawDiskAvailableCap, + ab.ZipDiskAvailableCap, + "原始盘状态", + "原始盘Host初始化状态", + "原始盘SATA控制器状态", + "原始盘SATA错误计数", + "压缩盘状态", + "压缩盘Host初始化状态", + "压缩盘SATA控制器状态", + "压缩盘SATA错误计数", + "保留", + "DDR初始化状态", + "原始图像硬盘状态", + "压缩数据硬盘状态", + "硬盘1读写状态", + "硬盘2读写状态", + "硬盘1初始化状态", + "硬盘2初始化状态", + "保留", + "保留", + "硬盘1禁用标志", + "硬盘2禁用标志", + "保留", + "B2数据移位", + "B1数据移位", + "B4数据移位", + "B3数据移位", + ab.CommandCount, + ab.LastCommandCode, + "指令接收状态", + "错误指令计数", + "错误指令帧编号", + "保留", + "传感器数字电路温度", } - var afs []*AuxFocalBox - for i := 0; i < len(data); i += 128 { - var ab AuxFocalBox - if err := ab.Decode(data[i : i+128]); err != nil { - return nil, err - } - afs = append(afs, &ab) - - ab.Print() - break + for i := 0; i < len(values); i++ { + cell, _ := excelize.CoordinatesToCellName(col, row) + f.SetCellValue("Sheet1", cell, values[i]) + col++ } - return afs, nil + + return len(values), nil } diff --git a/extract/aux_elements.go b/extract/aux_elements.go index 16bc4b3..c642ebc 100644 --- a/extract/aux_elements.go +++ b/extract/aux_elements.go @@ -1,22 +1,23 @@ package extract -import "github.com/tealeg/xlsx" +import ( + "github.com/xuri/excelize/v2" +) -func createAuxXlxs(fname string) error { - nwb := xlsx.NewFile() - sheet, err := nwb.AddSheet("辅助数据") +func createAuxXlsx(fname string) error { + f := excelize.NewFile() + defer f.Close() + + cell, err := excelize.CoordinatesToCellName(1, 1) if err != nil { - panic(err) + return err } - row := sheet.AddRow() - for _, header := range AuxHeader { - cell := row.AddCell() - cell.SetString(header) - } - return nwb.Save(fname) + f.SetSheetRow("Sheet1", cell, &AuxHeader) + + return f.SaveAs(fname) } -var AuxHeader = []string{ +var AuxHeader = []interface{}{ "包头信息", "填充位", "帧头信息", diff --git a/extract/aux_head.go b/extract/aux_head.go index d2d8816..97ce03f 100644 --- a/extract/aux_head.go +++ b/extract/aux_head.go @@ -5,7 +5,7 @@ import ( "errors" "fmt" - "github.com/tealeg/xlsx" + "github.com/xuri/excelize/v2" ) // 每行传感器数据帧头信息长度为24字节 @@ -99,28 +99,30 @@ func (afh AuxFrameHead) CheckFrmHead() bool { return false } -func (afh AuxFrameHead) SaveXlsx(row *xlsx.Row) error { - values := []string{ - fmt.Sprintf("0x%x", afh.PkgHead), +func (afh AuxFrameHead) SaveXlsx(f *excelize.File, col, row int) (int, error) { + values := []interface{}{ + fmt.Sprintf("0x%X", afh.PkgHead), "", - fmt.Sprintf("0x%x", afh.FrmHead), + fmt.Sprintf("0x%X", afh.FrmHead), afh.ImageMode(), afh.BandStatus(afh.B4), afh.BandStatus(afh.B3), afh.BandStatus(afh.B2), afh.BandStatus(afh.B1), afh.BandStatus(afh.B0), - fmt.Sprintf("%d", afh.SerialNo), - fmt.Sprintf("%d", afh.TimeSec), - fmt.Sprintf("%d", afh.TimeSecFrac), - fmt.Sprintf("%d", afh.FileNo), + afh.SerialNo, + afh.TimeSec, + afh.TimeSecFrac, + afh.FileNo, } - for _, v := range values { - row.AddCell().SetString(v) + for i := 0; i < len(values); i++ { + cell, _ := excelize.CoordinatesToCellName(col, row) + f.SetCellValue("Sheet1", cell, values[i]) + col++ } - return nil + return len(values), nil } func (afh AuxFrameHead) ImageMode() string { diff --git a/extract/aux_platform.go b/extract/aux_platform.go index 24c14d9..4fc823e 100644 --- a/extract/aux_platform.go +++ b/extract/aux_platform.go @@ -7,7 +7,7 @@ import ( "time" "github.com/k0kubun/pp/v3" - "github.com/tealeg/xlsx" + "github.com/xuri/excelize/v2" log "github.com/sirupsen/logrus" "starwiz.cn/sjy01/preprocessing/calculator" @@ -338,8 +338,356 @@ func (ap AuxPlatform) Print() { pp.Println(ap) } -func (ap AuxPlatform) SaveXlsx(row *xlsx.Row) error { - return nil +func (ap AuxPlatform) SaveXlsx(f *excelize.File, col, row int) (int, error) { + var values = []interface{}{ + ap.UTCTimeSec, + ap.Waveway, + ap.Microsecond, + ap.QuatAttstarQ0, + ap.QuatAttstarQ1, + ap.QuatAttstarQ2, + ap.QuatAttstarQ3, + ap.QuatOrbitQ1, + ap.QuatOrbitQ2, + ap.QuatOrbitQ3, + ap.QuatOrbJQ1, + ap.QuatOrbJQ2, + ap.QuatOrbJQ3, + ap.Eular1, + ap.Eular2, + ap.Eular3, + ap.DotEular1, + ap.DotEular2, + ap.DotEular3, + ap.ModTime, + ap.DTime, + ap.AutoState, + ap.ProTrack, + ap.QeQ1, + ap.QeQ2, + ap.QeQ3, + ap.We1, + ap.We2, + ap.We3, + ap.WTFX, + ap.WTFY, + ap.WTFZ, + ap.FbdriftX, + ap.FbdriftY, + ap.FbdriftZ, + ap.KalbX, + ap.KalbY, + ap.KalbZ, + ap.HTDX, + ap.HTDY, + ap.HTDZ, + ap.CommandWheelX, + ap.CommandWheelY, + ap.CommandWheelZ, + ap.QuatG1, + ap.QuatG2, + ap.QuatG3, + ap.WG1, + ap.WG2, + ap.WG3, + ap.J2000PosX, + ap.J2000PosY, + ap.J2000PosZ, + ap.J2000VelX, + ap.J2000VelY, + ap.J2000VelZ, + ap.W84PosX, + ap.W84PosY, + ap.W84PosZ, + ap.W84VelX, + ap.W84VelY, + ap.W84VelZ, + ap.AngleDraft, + ap.DataTransLong, + ap.DataTransLat, + ap.DataTransH, + ap.StarPrio[0], + ap.StarPrio[1], + ap.StarPrio[2], + ap.WheelspeedcalX, + ap.WheelspeedcalY, + ap.WheelspeedcalZ, + "", + "", + "", + "", + "锂电池温度", + "相机主镜温度", + "相机次镜温度", + "推进模块温度", + "负X侧相机桁架杆温度", + "正X正Y侧相机桁架杆温度", + "正X负Y侧相机桁架杆温度", + "正X侧相机支撑背板温度", + "负X侧相机支撑背板温度", + "星敏支架温度", + "成像电箱温度", + "正Y帆板温度", + "电源下位机温度", + "配电热控驱动温度", + "电源控制器温度", + "数字太阳敏矢量数据有效位", + "数字太阳敏矢量数据X", + "数字太阳敏矢量数据Y", + "数字太阳敏位置X1", + "数字太阳敏位置X2", + "数字太阳敏位置Y1", + "数字太阳敏位置Y2", + "太阳敏温度", + "数字太阳敏当前正在使用的阈值(源码)", + "数字太阳敏当前正在使用的增益", + "保留", + "保留", + "保留", + "错误码计数", + "单粒子错误计数", + "配电错误码1", + "配电错误码2", + "配电错误码3", + "配电错误码4", + "配电错误码5", + "GPS天内秒", + "GPSUTC时间累计秒", + "太阳阵电流", + "母线电流", + "负载电流", + "蓄电池电压", + "电源母线电压", + "CPU5.2V电压遥测值", + "5.2V配电电压遥测值", + "保留", + "蓄电池组当前电量", + "模式运行时间秒", + "卫星现运行模式", + "组合业务标识", + "当前业务状态", + "中心机指令接收总计数", + "中心机错误指令计数", + "执行指令所在分系统", + "执行指令的指令代码", + "执行延时指令总计数", + "当前延时指令计数", + "执行延时指令所在分系统", + "执行延时指令的指令代码", + "当前延时业务计数", + "成功执行业务计数", + "异常中止业务计数", + "指令执行状态", + "业务异常中止状态", + "测控数传一体机通信状态", + "保留", + "北斗短报文通信状态", + "GPS接收机通信状态", + "数字太阳敏通信状态", + "星敏1通信状态", + "星敏2通信状态", + "光纤陀螺通信状态", + "MEMS陀螺通信状态", + "飞轮1通信状态", + "飞轮2通信状态", + "飞轮3通信状态", + "飞轮4通信状态", + "智能载荷通信状态", + "保留", + "保留", + "电磁阀开关状态", + "业务保存状态", + "卫星类型标识", + "卫星序号标识", + "保留", + "保留", + "保留", + "保留", + "锂电池加热器通断状态", + "相机主镜加热器通断状态", + "相机次镜加热器通断状态", + "推进模块加热器通断状态", + "相机负X侧桁架杆加热器通断状态", + "成像电箱加热器通断状态", + "相机正X正Y侧桁架杆加热器通断状态", + "相机正X负Y侧桁架杆加热器通断状态", + "相机正X侧支撑背板加热器通断状态", + "相机负X侧支撑背板加热器通断状态", + "星敏支架加热器通断状态", + "保留", + "温度修正系数校验状态", + "电源下位机广播帧监视功能", + "当前控温码表", + "默认控温码表", + "飞轮1电源供电状态", + "飞轮2电源供电状态", + "飞轮3电源供电状态", + "SADA1电源供电状态", + "SADA2电源供电状态", + "测控数传电源供电状态", + "保留", + "保留", + "北斗短报文供电状态", + "推进电源供电状态", + "焦面电源供电状态", + "飞轮4电源供电状态", + "星敏1电源供电状态", + "星敏2电源供电状态", + "数字太阳敏电源供电状态", + "导航电源供电状态", + "三轴光纤陀螺电源供电状态", + "MEMS陀螺电源供电状态", + "热控正线状态", + "热控1状态", + "热控2状态", + "保留", + "保留", + "保留", + "锂电池加热器控温模式", + "相机主镜加热器控温模式", + "相机次镜加热器控温模式", + "推进模块加热器控温模式", + "相机负X侧桁架杆加热器控温模式", + "相机正X正Y侧桁架杆加热器控温模式", + "相机正X负Y侧桁架杆加热器控温模式", + "相机正X侧支撑背板加热器控温模式", + "相机负X侧支撑背板加热器控温模式", + "星敏支架加热器控温模式", + "成像电箱加热器控温模式", + "保留", + "保留", + "保留", + "保留", + "保留", + "保留", + "保留", + "接收机时间来源", + "定位模式", + "轨道数据有效标示", + "主备机标志", + "PPS状态", + "GPS最高信噪比", + "BD最高信噪比", + "参与定位的GPS导航星数", + "参与定位的BD导航星数", + "GPS几何精度因子", + "GPS连续工作时间", + "保留", + "保留", + ap.WGS84PosX, + ap.WGS84PosY, + ap.WGS84PosZ, + ap.WGS84VelX, + ap.WGS84VelY, + ap.WGS84VelZ, + ap.J2000Pos_X, + ap.J2000Pos_Y, + ap.J2000Pos_Z, + ap.J2000Vel_X, + ap.J2000Vel_Y, + ap.J2000Vel_Z, + ap.FOGyroXAV, + ap.FOGyroYAV, + ap.FOGyroZAV, + ap.FOGyroXAV1, + ap.FOGyroYAV1, + ap.FOGyroZAV1, + ap.SS1_UTCTime, + ap.SS1_UTCTimeFrac, + ap.SS1_Q1, + ap.SS1_Q2, + ap.SS1_Q3, + ap.SS1_Q4, + ap.SS1_ExposureTime, + ap.SS1_Threshold, + ap.SS1_BackgroudV, + "星敏A上电进入boot标志", + "星敏AEDAC打开标志", + "星敏A程序版本", + "星敏A四元数滤波标志", + "星敏A系统内部工作进程代号", + ap.SS1_WorkMode, + ap.SS1_ExtractStars, + ap.SS1_NavStars, + ap.SS1_Gain, + ap.SS1_RegonizedStars, + ap.SS1_ExtenalImage, + ap.SS1_AttitudeActive, + "星敏A内部软件版本号低3位", + "星敏A产品设备编号低5位", + "星敏A成像传感器温度", + "星敏A在轨EDAC错误计数", + ap.SS1_ImgFrmNo, + "星敏A四星寻找阈值", + "星敏A跟踪阈值", + "星敏ASAA阈值", + "星敏ASAA工作模式", + "星敏A动态模式标志位", + ap.SS1_XAV, + ap.SS1_YAV, + ap.SS1_ZAV, + "星敏A星点阈值自适应功能", + "保留", + "星敏A速率质量", + ap.SS2_UTCTime, + ap.SS2_UTCTimeFrac, + ap.SS2_Q1, + ap.SS2_Q2, + ap.SS2_Q3, + ap.SS2_Q4, + ap.SS2_ExposureTime, + ap.SS2_Threshold, + ap.SS2_BackgroudV, + "星敏B上电进入boot标志", + "星敏BEDAC打开标志", + "星敏B程序版本", + "星敏B四元数滤波标志", + "星敏B系统内部工作进程代号", + ap.SS2_WorkMode, + ap.SS2_ExtractStars, + ap.SS2_NavStars, + ap.SS2_Gain, + ap.SS2_RegonizedStars, + ap.SS2_ExtenalImage, + ap.SS2_AttitudeActive, + "星敏B内部软件版本号低3位", + "星敏B产品设备编号低5位", + "星敏B成像传感器温度", + "星敏B在轨EDAC错误计数", + ap.SS2_ImgFrmNo, + "星敏B四星寻找阈值", + "星敏B跟踪阈值", + "星敏BSAA阈值", + "星敏BSAA工作模式", + "星敏B动态模式标志位", + "保留", + ap.FlyWheel1_Vel, + ap.FlyWheel1_Amps, + ap.FlyWheel2_Vel, + ap.FlyWheel2_Amps, + ap.FlyWheel3_Vel, + ap.FlyWheel3_Amps, + ap.FlyWheel4_Vel, + ap.FlyWheel4_Amps, + ap.MemsGyroXAV, + ap.MemsGyroYAV, + ap.MemsGyroZAV, + ap.MagnetictrengthX, + ap.MagnetictrengthY, + ap.MagnetictrengthZ, + ap.ASSTimeInt, + ap.ASSTimeDec, + "", + fmt.Sprintf("%08b", ap.CheckSum), + } + + for i := 0; i < len(values); i++ { + cell, _ := excelize.CoordinatesToCellName(col, row) + f.SetCellValue("Sheet1", cell, values[i]) + col++ + } + + return len(values), nil } // Extractor 辅助数据提取器 diff --git a/go.mod b/go.mod index 805157d..67dc43e 100644 --- a/go.mod +++ b/go.mod @@ -1,15 +1,19 @@ module starwiz.cn/sjy01/preprocessing -go 1.21 +go 1.20 -toolchain go1.21.0 +require github.com/xuri/excelize/v2 v2.8.1 require ( github.com/jonboulle/clockwork v0.4.0 // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/onsi/ginkgo v1.16.5 // indirect github.com/onsi/gomega v1.33.1 // indirect - github.com/tealeg/xlsx v1.0.5 // indirect + github.com/richardlehane/mscfb v1.0.4 // indirect + github.com/richardlehane/msoleps v1.0.3 // indirect + github.com/xuri/efp v0.0.0-20231025114914-d1ff6096ae53 // indirect + github.com/xuri/nfp v0.0.0-20230919160717-d98342af3f05 // indirect golang.org/x/crypto v0.23.0 // indirect golang.org/x/net v0.25.0 // indirect golang.org/x/term v0.20.0 // indirect diff --git a/go.sum b/go.sum index f6b5e36..cac3ecf 100644 --- a/go.sum +++ b/go.sum @@ -19,7 +19,6 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= @@ -27,9 +26,6 @@ github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= github.com/k0kubun/pp/v3 v3.2.0 h1:h33hNTZ9nVFNP3u2Fsgz8JXiF5JINoZfFq4SvKJwNcs= github.com/k0kubun/pp/v3 v3.2.0/go.mod h1:ODtJQbQcIRfAD3N+theGCV1m/CBxweERz2dapdz1EwA= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8= github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is= github.com/lestrrat-go/file-rotatelogs v2.4.0+incompatible h1:Y6sqxHMyB1D2YSzWkLibYKgg+SwmyFU9dF2hn6MdTj4= @@ -43,6 +39,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= @@ -58,6 +56,11 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= +github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= +github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= +github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM= +github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -70,12 +73,16 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE= -github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/x-cray/logrus-prefixed-formatter v0.5.2 h1:00txxvfBM9muc0jiLIEAkAcIMJzfthRT6usrui8uGmg= github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= +github.com/xuri/efp v0.0.0-20231025114914-d1ff6096ae53 h1:Chd9DkqERQQuHpXjR/HSV1jLZA6uaoiwwH3vSuF3IW0= +github.com/xuri/efp v0.0.0-20231025114914-d1ff6096ae53/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= +github.com/xuri/excelize/v2 v2.8.1 h1:pZLMEwK8ep+CLIUWpWmvW8IWE/yxqG0I1xcN6cVMGuQ= +github.com/xuri/excelize/v2 v2.8.1/go.mod h1:oli1E4C3Pa5RXg1TBXn4ENCXDV5JUMlBluUhG7c+CEE= +github.com/xuri/nfp v0.0.0-20230919160717-d98342af3f05 h1:qhbILQo1K3mphbwKh1vNm4oGezE1eF9fQWmNiIpSfI4= +github.com/xuri/nfp v0.0.0-20230919160717-d98342af3f05/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -84,6 +91,7 @@ golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -129,7 +137,6 @@ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miE google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=