背景
本来一直是使用go来搞的。毕竟我不会py。但是excel文件格式比较久,是xls的。目前go语言操作xls存在问题,就是某单元格内容获取不全。但是我用py的第三方库就没有这个问题。所以有了这篇文章。
问题举例:
A1的内容是"我是中国人"
使用目前github的go版本的xls库,获取A1单元格的内容会变成"我是"、“中国人”
导致我写入新表的时候就需要用两个单元格来存,最终排版等等都会错误。
大概操作说明
以下给几个截图,是一个pdf文件,目前已经上传。
链接是我(后面审核通过后会更新)
该库不能操作xls文件。只能操作xlsx文件。所以操作xlsx文件我还是会用go版本的Excelize。官网链接
操作xls的代码
该库是xlrd,读取xls的内容是正常的。所以读取xls文件可以使用该库。
import xlrd,openpyxl
def XW(fileName,ipName):
'''
将文件名称传进来。
根据ip名称去读取相应的文件。
再将相应的内容黏贴到同一文件去。
'''
destXlsx = "./b.xlsx"
xlsName = "./a/" + fileName
book = xlrd.open_workbook(xlsName) # 实例化对象
sheet1 = book.sheet_by_index(1) # 通过sheet索引获得sheet对象
nrows = sheet1.nrows # 获取行总数
workbook = openpyxl.load_workbook(filename = destXlsx)
sheet = workbook["Sheet1"]
fMap = {
"端口": "",
"协议": "",
"服务": "",
}
headers = sheet1.row_values(1)
for i in range(2, nrows):
data = {headers[i]: v for i, v in enumerate(sheet1.row_values(i))}
ipAddr = {"扫描地址":ipName}
for k, v in fMap.items():
if not data.get(k):
data[k] = fMap[k]
else:
fMap[k] = data[k]
# print(i + 1)
# print("现在是第",i+1,data)
if fMap["端口"] == "--":
fMap["端口"] = "无端口"
else:
fMap["端口"] = int(fMap["端口"])
dataDict = dict((("J",ipAddr["扫描地址"]),("K",fMap["端口"]),("L",fMap["协议"]),("M",fMap["服务"]),("N",data["漏洞名称"]),("O",data["风险等级"]),("P",data["详细描述"]),("Q",data["解决办法"])))
sheet.append(dataDict)
workbook.save(filename = destXlsx)