如何使用Python在excel中的不同位置编写多个单元格

时间:2018-12-03 13:56:46

标签: python excel openpyxl

我想用Python用某种字体写多张纸,像这样:

from openpyxl.styles import colors
from openpyxl.styles import Font, Color
from openpyxl import Workbook

import openpyxl as op
from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font

def style_range_multiple_entries(file, cells_description, font): 

book = op.load_workbook(file) 

for k, description in enumerate(cells_description): 
 for t, list_item in enumerate(description[k]): 
 ws = book.worksheets[description[1]] 
 cell = ws.cell(description[2]) 
 cell.value = description[0] 
 cell.font = font 

book.save("styled.xlsx")

names = [[['apple', 'banana', 'strawberry'], [0,0,0],['B2','B20',''B25]], (...) ]

font1 = Font(name='Calibri', size=16, bold=True)

style_range_multiple_entries('styled.xlsx',names, font1)

但是循环有问题。

我想在一张纸上在多个地方书写多个单元格,但是要使用相同的字体。像这样:

Sheet 1:
Cell'B2' = apple
Cell 'B20' = banana
Cell 'B25' = strawberry

您知道我的代码有什么问题吗?

提前谢谢!

P.S。

我构建了一个适用于我的代码,如下所示:

def style_range(file, cells_description, font):

    book = op.load_workbook(file)

    for k, description in enumerate(cells_description):
        ws = book.worksheets[description[2]]
        cell = ws.cell(description[1])
        cell.value = description[0]
        cell.font = font
    book.save("styled.xlsx")  

但是我需要为列表指定类似以下内容:

list = [['apple','B2',0], ['banana','B20',0], ['strawberry','B25',0], (...) ]

,而我想针对像我在“名称”上方定义的列表进行操作。

1 个答案:

答案 0 :(得分:1)

  

*问题**:我想针对像我在“名称”上方定义的列表进行操作

您必须从names构建一个 Matrix

  

注意:与其立即构建Matrix,不如立即构建它!

  • 数据== listlist的{​​{1}}

    list
  • 获取矩阵

    的尺寸
    names = [[['apple', 'banana', 'strawberry', 'raspberry'], 
              [0, 0, 0, 0], 
              ['B2', 'B20', 'B25', 'B30']
            ]]
    
  • x_range = len(names[0]) y_range = len(names[0][0])

    构建 Matrix
    names
      

    替代:全部一行

    names2 = []
    for y in range(y_range):
        names2.append([])
        for x in range(x_range):
            names2[y].append(names[0][x][y])
    
  

输出

names2 = [[names[0][x][y] for x in range(x_range)] for y in range(y_range)]

print("names2:{}".format(names2)) names2:[['apple', 0, 'B2'], ['banana', 0, 'B20'], ['strawberry', 0, 'B25'], ['raspberry', 0, 'B30']] 的{​​{1}}中读取list,并建立一组项目:

  

注意:没有理由在循环中反复使用list
  一次获取,并将其传递给您的参数,例如list

ws = book.worksheets[...
  

输出

style_one_cell(ws, names2, font)

经过Python:3.5.3

的测试