一、项目背景
1.1需求:
项目实施过程中存在多次下采购单的事项,如果查询过去采购单中下了哪些设备,数量以及相应信息,如何处理呢?
备注,价格等都是修改了,不是原始内容,只是参考
1.2实现步骤
1.检索项目名称,以及 采购数量这列 ,获取对象产品名称和对应的数量
2.检索指定名称在所有sheet表格中是否有相应的数据
3.上述表格是其中的一张sheet表,实质上有N多个这样表格
二、项目实现代码以及注释
2.1部分代码
作用;用来获取表格中的名称,这些名称是否是我需要查找的切片列表中的内容;
// 我需要检索的信息,都是放入一个切片中
var devicelists = []string{"50对语音配线架", "24口网络配线架", "24口网络理线架", "4口终端盒", "光纤收发器", "96芯光纤配线架"}
2.2切片字符串判断
// InSlice 判断字符串是否在 slice 中。
func InSlice(items []string, item string) bool {
for _, eachItem := range items {
if eachItem == item {
return true
}
}
return false
}
2.3所有代码
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
//eve sheet name的内容
// InSlice 判断字符串是否在 slice 中。
func InSlice(items []string, item string) bool {
for _, eachItem := range items {
if eachItem == item {
return true
}
}
return false
}
// 我需要检索的信息
// var devicelists []string = []string{"50对语音配线架", "24口网络配线架", "24口网络理线架", "4口终端盒", "光纤收发器", "96芯光纤配线架"}
var devicelists = []string{"50对语音配线架", "24口网络配线架", "24口网络理线架", "4口终端盒", "光纤收发器", "96芯光纤配线架"}
func sheet(sheetname string, f *excelize.File) {
//fmt.Println("+++++++++++++++++++++++++")
// 获取 Sheet1 上所有单元格
rows, err := f.GetRows(sheetname)
if err != nil {
fmt.Println(err)
return
}
//fmt.Println(rows)
for _, row := range rows {
//fmt.Println(row, "========", index)
//判断每行的里的字段长度,如果是小于6 那就是不获取设备名字和设备价格
if len(row) < 6 {
continue
}
//获取excel中,设备的名称
kindname := row[1]
//获取excel中,设备的数量
kcount := row[4]
//如果表格中 kcount没有内容,那就是给复制一个“0”字符串
if kcount == "" {
kcount = "0"
}
//fmt.Printf("固定列名字是:%s,类别是%T", kindname, kindname)
//fmt.Println()
//调用函数 用来判断 设备名称是否是我需要寻找的内容
//如果是我需要寻找的内容就是返回对应表的名称以及 设备名称和 对应数量
if InSlice(devicelists, kindname) {
//fmt.Println(sheetname, kindname, "=====++++++=======》", kcount)
fmt.Printf("获取信息:sheet表:%s;设备名称:%s;设备数量:%s\n;", sheetname, kindname, kcount)
//fmt.Println()
}
}
//fmt.Println("+++++++++++++++++++++++++")
//指定单元格的值,查询
//value, _ := f.GetCellValue(sheetname, "B7")
//fmt.Println(value)
//for _, row := range rows {
// for _, colCell := range row {
// fmt.Print(colCell, "\t")
// }
// fmt.Println()
//}
}
func sheet_bak(sheetname string, f *excelize.File) {
// 获取 Sheet1 上所有单元格
rows, err := f.GetRows(sheetname)
if err != nil {
fmt.Println(err)
return
}
for _, row := range rows {
for _, colCell := range row {
fmt.Print(colCell, "\t")
}
fmt.Println()
}
}
// 读取Excel表格
func main() {
f, err := excelize.OpenFile("by.xlsx")
if err != nil {
fmt.Println(err)
return
}
defer func() {
if err := f.Close(); err != nil {
fmt.Println(err)
}
}()
sheetnames := f.GetSheetList()
//fmt.Printf("本excel表格的sheetnames:%s", sheetnames)
//fmt.Println("===============")
//遍历所有的表格sheet,调用处理函数
for _, sheetname := range sheetnames {
//fmt.Println(sheetname)
sheet(sheetname, f)
}
}