之前已经用openpyxl去打开已有excel文件,读取信息:
【已解决】python解析excel文件并读取其中的sheet和row和column的值
现在需要新建类似于这样的excel:
并且创建对应的第一行和第二行的表头,且部分单元格是合并的
然后再一点点把之前已有的excel中的内容:
保存进来。
目的是统一格式。
去写代码并调试。
openpyxl 新建excel
openpyxl new excel
【openpyxl】openpyxl对Excel表格的创建与写操作例程 – CSDN博客
openpyxl – A Python library to read/write Excel 2010 xlsx/xlsm files — openpyxl 2.5.3 documentation
Openpyxl tutorial – read, write Excel xlsx files in Python
Manipulating a workbook in memory — openpyxl 2.5.3 documentation
用:
<code>from openpyxl import Workbook, load_workbook from openpyxl.styles import Alignment # create new output unified format excel file wbOut = Workbook() logging.info("wbOut=%s", wbOut) wsStorybook = wbOut.create_sheet(StorybookSheetTitle) wsSong = wbOut.create_sheet(SongSheetTitle) logging.info("wsStorybook=%s, wsSong=%s", wsStorybook, wsSong) # init headers def initOutputExcelHeaders(ws): logging.info("ws=%s", ws) </code>
nameCell = ws[“A1”]
nameCell.value = “名称”
nameCell.alignment = Alignment(horizontal=’center’, vertical=’center’)
ws.merge_cells(‘A1:A2’)
initOutputExcelHeaders(wsStorybook)
initOutputExcelHeaders(wsSong)
wbOut.save(OutputUnifiedFormatExcelFilename)
可以生成所需要的excel了:
然后此处接着要:
给单元格设置背景色
【已解决】openpyxl中给一个范围内的单元格批量设置样式:居中对齐和背景色
另外,再去优化一下:
加上cell的边框的边线
Working with styles — openpyxl 2.5.0 documentation
以及发现批量设置,可以用到:
去试试
最后用:
<code>from openpyxl import Workbook, load_workbook from openpyxl.styles import Alignment from openpyxl.styles import PatternFill, colors, Color from openpyxl.styles import NamedStyle, Font, Border, Side # create new output unified format excel file wbOut = Workbook() logging.info("wbOut=%s", wbOut) # wsStorybook = wbOut.create_sheet(StorybookSheetTitle) wsStorybook = wbOut.active wsStorybook.title = StorybookSheetTitle wsSong = wbOut.create_sheet(SongSheetTitle) logging.info("wsStorybook=%s, wsSong=%s", wsStorybook, wsSong) # common style alignmentCenter = Alignment(horizontal='center', vertical='center') fontYahei12 = Font(name=u'微软雅黑', bold=True, size=12) thinSide = Side(style='thin', color=colors.BLACK) allBlackThinBorder = Border(left=thinSide, top=thinSide, right=thinSide, bottom=thinSide) # several type of headers style NamedStyleCommonHeader = "CommonHeader" NamedStyleStorybookHeader = "StorybookHeader" NamedStyleSongHeader = "SongHeader" NamedStyleFileHeader = "FileHeader" commonBkgColorHex = "AACF91" commonFill = PatternFill(start_color=commonBkgColorHex, end_color=commonBkgColorHex, fill_type="solid") ... commonStyleHeader = NamedStyle(name=NamedStyleCommonHeader) commonStyleHeader.font = fontYahei12 commonStyleHeader.border = allBlackThinBorder commonStyleHeader.alignment = alignmentCenter commonStyleHeader.fill = commonFill wbOut.add_named_style(commonStyleHeader) ... # init headers def initOutputExcelHeaders(ws): logging.info("ws=%s", ws) nameCell = ws["A1"] nameCell.value = "名称" ws.merge_cells('A1:A2') contentAbstractCell = ws["B1"] contentAbstractCell.value = "内容简介" ws.merge_cells('B1:B2') resTypeCell = ws["C1"] resTypeCell.value = "资源类型" ws.merge_cells('C1:C2') isSeriesCell = ws["D1"] isSeriesCell.value = "是否是系列" ws.merge_cells('D1:D2') seriesCell = ws["E1"] seriesCell.value = "系列" ws.merge_cells('E1:F1') seriesNumCell = ws["E2"] seriesNumCell.value = "序号" seriesNameCell = ws["F2"] seriesNameCell.value = "名称" for eachCommonRow in ws.iter_rows("A1:L2"): logging.info("eachCommonRow=%s", eachCommonRow) for eachCellInRow in eachCommonRow: logging.info("eachCellInRow=%s", eachCellInRow) eachCellInRow.style = NamedStyleCommonHeader initOutputExcelHeaders(wsStorybook) initOutputExcelHeaders(wsSong) wbOut.save(OutputUnifiedFormatExcelFilename) </code>
可以实现效果:
注意:
<code>fontYahei12 = Font(name=u'微软雅黑', bold=True, size=12) </code>
中,如果name不是unicode,则会报错,直接导致excel打不开 -》 估计就是font字体找不到,所以报错。
所以记得(Python2)要用u’微软雅黑’,表示是微软雅黑的字体: