This commit is contained in:
nuknal
2024-05-21 17:41:00 +08:00
parent 84c8b5d23c
commit db650cdaa9
7 changed files with 487 additions and 72 deletions

View File

@@ -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()
}

View File

@@ -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
}

View File

@@ -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{}{
"包头信息",
"填充位",
"帧头信息",

View File

@@ -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 {

View File

@@ -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 辅助数据提取器

10
go.mod
View File

@@ -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

23
go.sum
View File

@@ -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=