openpyxl Excel写入文件时,莫名会丢失数据,问题原因未找到,使用xlsxwriter进行数据写入及xlsxwriter对单元格的样式操作 附常用的excel操作库
使用openpyxl 库进行单元格大数据写入时(大概900字) 莫名的会丢失数据,有时候会丢失前面一点,有时候会丢失后面一点,打印了保存前的日志,和保存后的变量输出日志,都是完整的,但是保存到Excel之后,数据就不完整了,原因困扰了我很久,没有找到
import openpyxl
# xlsxwriter只可以新建一个excel,不可以读取和更新
# 创建一个workbook 和增加一个worksheet,默认为sheet1...,也可以直接为sheet命名,例如下边的test
import xlsxwriter as xlsxwriter
from loguru import logger
# 保存Excel
def saveExcel(codes):
'''
:param codes: --> dic
:return:
'''
try:
data = openpyxl.load_workbook("./标题.xlsx")
for num, code in codes.items(): # 这里的code是字典的key
# 先填充,最后在进行保存
table = data["Sheet1"]
table["B" + str(num)] = code
logger.info('==========标题:{},表数据行:{},内容:{}', str(sheet2.cell(num, 1).value), str(num), code)
data.close()
data.save("./标题.xlsx")
except Exception as e:
logger.info('Excel保存异常:{}', e)
def saveExcelV2(codes):
'''
:param codes: --> dic
:return:
'''
workbook = xlsxwriter.Workbook('result.xlsx', options={'constant_memory': True})
worksheet = workbook.add_worksheet() # 默认为 Sheet1.
myformat = workbook.add_format({
'font_size': 14,
# 'font_color ': 'red',
'bold': True
})
myformat.set_color('red')
# 从首行、首列开始.
row = 1
col = 0
worksheet.write(0, 0, '标题', myformat)
worksheet.write(0, 1, '内容', myformat)
for key, value in codes.items(): # 这里的code是字典的key
worksheet.write(row, col, key)
worksheet.write(row, col + 1, value)
row += 1
workbook.close()
调用saveExcel
方法时,保存短数据没问题,为了实现功能,无奈我只能使用了另一个excel写入的库xlsxwriter
xlsxwriter 处理单元格的样式数据,函数
import xlsxwriter
book = xlsxwriter.Workbook(
filename='./test.xlsx',
options={ # 全局设置
'strings_to_numbers': True, # str 类型数字转换为 int 数字
'strings_to_urls': False, # 自动识别超链接
'constant_memory': False, # 连续内存模式 (True 适用于大数据量输出)
'default_format_properties': {
'font_name': '微软雅黑', # 字体. 默认值 "Arial"
'font_size': 10, # 字号. 默认值 11
# 'bold': False, # 字体加粗
# 'border': 1, # 单元格边框宽度. 默认值 0
# 'align': 'left', # 对齐方式
# 'valign': 'vcenter', # 垂直对齐方式
# 'text_wrap': False, # 单元格内是否自动换行
# ...
},
}
)
sheet = book.add_worksheet('sheet 1')
# 在全局设置的基础上创建样式
my_format = book.add_format({
'fg_color': 'yellow', # 单元格填充颜色. 常用的颜色可以用单词描述. 自定义的颜色可以用 '#FFFFFF' 这样描述
})
sheet.write(0, 0, 'hello', my_format)
book.close()
'''
xlsxwriter模块add_format参数详解
# 数字
num_format = 'General' # 数字格式
# 字体
font_name = 'Arial' # 字体
font_size = 11 # 字号
font_color = 0x0 # 颜色
bold = True # 加粗
italic = True # 斜体
underline = 0 # 下划线,0:无;1:单下划线;2:双下划线;……
font_strikeout = True # 删除线
font_script = 0 # 上下标,0:无;1:上标;2:下标
font_outline = True # 轮廓
font_shadow = True # 阴影
# 保护
hidden = False # 隐藏
locked = True # 锁定
# 对齐
align = 'left' # 水平对齐 'left'|'centre'|'right'|'fill'|'justify'|'centre_across'|'distributed'|'justify_distributed'
valign = 'vcentre' # 垂直对齐 'top'|'vcentre'|'bottom'|'vjustify'|'vdistributed'
text_wrap = True # 自动换行
rotation = 0 # 旋转
indent = 1 # 缩进
shrink = True # 缩小字体填充
# 填充
pattern = 1 # 图案样式
fg_color = 0 # 前景色
bg_color = 0 # 背景色
# 边框
border = 0 # 边框,0:无边框;1:外边框;
border_color = 0x0 # 边框颜色
diag_border = 0
diag_color = 0x0
diag_type = 0
bottom = 0 # 底边框
bottom_color = 0x0 # 底边框颜色
left = 0 # 左边框
left_color = 0x0 # 左边框颜色
right = 0 # 右边框
right_color = 0x0 # 右边框颜色
top = 0 # 上边框
top_color = 0x0 # 上边框颜色
'''
常用的excel操作库
惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。
一代天骄,成吉思汗,只识弯弓射大雕。
俱往矣,数风流人物,还看今朝