要调整行高,你可以在`fun_beautify`方法中添加以下代码来实现:
def fun_beautify(self,sheet_name,dict):
self.sheet = self.excel
self.column_styles = dict
self.sheet.freeze_panes = 'AB2'
for self.column in self.sheet.columns:
self.column_letter = self.column.column_letter
print(self.column_letter)#即ABCD.....
if self.column_letter in self.column_styles:
self.style = self.column_styles
self.sheet.column_dimensions.width = self.style["width"]#设置列宽
for self.cell in self.column:
self.cell.border = self.style["border"]#边框
self.cell.font = self.style["font"]#字体
self.cell.alignment = self.style["alignment"]#居中方式
self.sheet.row_dimensions.height = 20
if self.cell.value == 0 or "0":
self.cell.value = None
else:
pass
我要加以判断,如果单元格的值是0或者文本0,就让单元格为空,加了最后那几行代码之后,怎么打开后整个表格都变成空白的了呢? laiyuanjie 发表于 2024-05-31 10:42
def fun_beautify(self,sheet_name,dict):
s ...
在你的代码中,空白单元格的产生可能是由于对整个列进行循环检查和操作时,不仅会对有效单元格进行判断并赋值为空,同时也将空白单元格(没有值)的赋值为空。这导致了整个表格变成空白。为了避免这种情况,可以在循环中添加条件判断来只处理非空单元格。以下是修改后的代码示例:
def fun_beautify(self, sheet_name, dict):
self.sheet = self.excel
self.column_styles = dict
self.sheet.freeze_panes = 'AB2'
for self.column in self.sheet.columns:
self.column_letter = self.column.column_letter
if self.column_letter in self.column_styles:
self.style = self.column_styles
self.sheet.column_dimensions.width = self.style['width']# 设置列宽
for self.cell in self.column:
if self.cell.value and (self.cell.value == 0 or self.cell.value == "0"):
self.cell.value = None# 单元格值为0或"0"时赋值为空
else:
self.cell.border = self.style['border']# 边框
self.cell.font = self.style['font']# 字体
self.cell.alignment = self.style['alignment']# 居中方式
self.sheet.row_dimensions.height = 20# 设置行高
在上述代码中,我们使用条件判断来控制仅对非空单元格进行赋值和美化操作。只有在单元格的值为0或"0"时才将其赋值为空,否则按照原有逻辑进行边框、字体、对齐方式和行高的设置。
请根据以上修改重新运行代码,并检查表格是否能够正确地去除值为0或"0"的单元格并进行美化操作。如果还有其他问题,请随时提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-5-31 10:44
在你的代码中,空白单元格的产生可能是由于对整个列进行循环检查和操作时,不仅会对有效单元格进行判断 ...
def fun_beautify(self,sheet_name,dict):
self.sheet = self.excel
self.column_styles = dict
self.sheet.freeze_panes = 'AB2'
for self.column in self.sheet.columns:
self.column_letter = self.column.column_letter
print(self.column_letter)#即ABCD.....
if self.column_letter in self.column_styles:
self.style = self.column_styles
self.sheet.column_dimensions.width = self.style["width"]#设置列宽
for self.cell in self.column:
self.cell.border = self.style["border"]#边框
self.cell.font = self.style["font"]#字体
self.cell.alignment = self.style["alignment"]#居中方式
self.sheet.row_dimensions.height = 20
if self.cell.value == 0 or "0":
self.cell.value = None
else:
pass
我这代码不是判别那个单元格是否为0或“0”么?如果是才为空,如果不是不是就跳过了么,为什么还会对有内容且不为0的赋值成空? laiyuanjie 发表于 2024-05-31 10:49
def fun_beautify(self,sheet_name,dict):
s ...
非常抱歉,我之前给出的解答有误。问题出在判断条件上。你在判断 `if self.cell.value == 0 or "0":` 中使用了逻辑或运算符,但是这个条件会一直返回True,因为非空字符串"0"被视为True。导致所有单元格都被赋值为空。
正确的判断条件应该是 `if self.cell.value == 0 or self.cell.value == "0":`,使用两个等号来进行数值比较或字符串相等的判断。这样才能正确判断单元格值是否为0或"0"。以下是修正后的代码示例:
def fun_beautify(self,sheet_name,dict):
self.sheet = self.excel
self.column_styles = dict
self.sheet.freeze_panes = 'AB2'
for self.column in self.sheet.columns:
self.column_letter = self.column.column_letter
print(self.column_letter)#即ABCD.....
if self.column_letter in self.column_styles:
self.style = self.column_styles
self.sheet.column_dimensions.width = self.style#设置列宽
for self.cell in self.column:
self.cell.border = self.style#边框
self.cell.font = self.style#字体
self.cell.alignment = self.style#居中方式
self.sheet.row_dimensions.height = 20
if self.cell.value == 0 or self.cell.value == "0":
self.cell.value = None
else:
pass
请将以上代码的修正部分应用到你的代码中,然后重新运行并检查问题是否得到解决。如果还有其他问题,请随时提问!非常抱歉给你带来了困扰。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-5-29 15:50
如果每一列的边框、字体大小、对齐方式等都各不相同,可以使用一个字典来存储每一列的美化属性,然后在 ...
如果我在美化的同时,要给C列的每一格填入一条特定的excel公式,给E列填入另外一条excel公式,得怎么弄 laiyuanjie 发表于 2024-06-05 14:50
如果我在美化的同时,要给C列的每一格填入一条特定的e ...
在给C列和E列填入特定的Excel公式时,你可以使用`openpyxl`库的`Formula`类来实现。以下是修改后的代码示例:
from openpyxl.utils import FORMULAE
from openpyxl import Workbook
from openpyxl.styles import Alignment
from openpyxl.utils.dataframe import dataframe_to_rows
class WriterExcel:
def __init__(self):
pass
def fun_save_sheet(self, sheet, sheet_name, path):
self.sheet = sheet
self.sheet_name = sheet_name
self.path = path
self.excel = Workbook()
self.excel.save(self.path)
self.fun_writer_excel()
def fun_writer_excel(self):
with pd.ExcelWriter(self.path, engine='openpyxl', mode='a') as writer:
writer.book = load_workbook(self.path)
writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
self.sheet.to_excel(writer, sheet_name=self.sheet_name, startrow=0, startcol=0, index=True)
# 进行美化操作,如设置边框、字体、对齐方式等
# 给C列填入公式
formula_C = '=SUM(A1:B1)'
for cell in writer.sheets['C']:
cell.value = formula_C
cell.alignment = Alignment(horizontal='center')
# 给E列填入公式
formula_E = '=AVERAGE(D1:D10)'
for cell in writer.sheets['E']:
cell.value = formula_E
cell.alignment = Alignment(horizontal='center')
writer.save()
在上述代码中,我们在循环遍历C列和E列时,分别给每个单元格赋值并设置对齐方式为居中。你可以根据需要自定义公式,并将其赋值给相应的单元格。注意,写入公式时需要使用等号("=")开头。
希望这可以解决你的问题!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-6-5 14:50
在给C列和E列填入特定的Excel公式时,你可以使用`openpyxl`库的`Formula`类来实现。以下是修改后的代码 ...
deduction_sheet_styles = {
'A': {
'border': border.l_thick,
'font': Font(size=12, bold=True),
'alignment': Alignment(horizontal='center', vertical='center',wrap_text=True),
'width' : 12,
'value' : None
},
'B': {
'border': border.l_drop,
'font': Font(size=12, bold=True),
'alignment': Alignment(horizontal='center', vertical='center',wrap_text=True),
'width' : 16,
'value' : None
},
'C': {
'border': None,
'font': Font(size=12, bold=True),
'alignment': Alignment(horizontal='center', vertical='center',wrap_text=True),
'width' : 14,
'value' : None
},
'D': {
'border': border.l_drop,
'font': Font(size=10, bold=True),
'alignment': Alignment(horizontal='center', vertical='center',wrap_text=True),
'width' : 8,
'value' : 5000
},
'E': {
'border': border.l_thick,
'font': Font(size=10, bold=True),
'alignment': Alignment(horizontal='center', vertical='center',wrap_text=True),
'width' : 8,
'value' : None
}}
这是我导入的美化的字典。。
def fun_beautify(self,sheet_name,dict):
self.sheet = self.excel
self.column_styles = dict
for self.column in self.sheet.columns:
self.column_letter = self.column.column_letter
# print(self.column_letter)#即ABCD.....
if self.column_letter in self.column_styles:
self.style = self.column_styles
self.sheet.column_dimensions.width = self.style["width"]#设置列宽
for self.cell in self.column:
self.cell.border = self.style["border"]# 边框
if self.cell.value == 0 or self.cell.value =="0":
self.cell.value = None
else:
self.cell.font = self.style["font"]#字体
self.cell.alignment = self.style["alignment"]#居中方式
self.sheet.row_dimensions.height = 27#调整行高
这个是我遍历的方法,,,fun_beautify传入的dict就是一开始那个字典,,,
如果我遍历的过程中,如果这个value == None,那么就pass,否则,就cell.value = 美化字典中的value。。。得怎么样实现这个。 laiyuanjie 发表于 2024-06-05 20:43
deduction_sheet_styles = {
'A': {
'b ...
在遍历过程中,如果字典中的`value`为`None`,你可以使用条件判断进行处理。以下是修改后的代码示例:
def fun_beautify(self, sheet_name, dict):
self.sheet = self.excel
self.column_styles = dict
for self.column in self.sheet.columns:
self.column_letter = self.column.column_letter
if self.column_letter in self.column_styles:
self.style = self.column_styles
for self.cell in self.column:
self.cell.border = self.style['border']
self.cell.font = self.style['font']
self.cell.alignment = self.style['alignment']
self.sheet.row_dimensions.height = self.style['height']
if self.cell.value is not None and self.style['value'] is not None:
self.cell.value = self.style['value']
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-6-5 20:43
在遍历过程中,如果字典中的`value`为`None`,你可以使用条件判断进行处理。以下是修改后的代码示例:
...
你这样是根据self.cell.value是否是空来判断,,
我是想直接判断self.style['value']是否等于None来判断,,如果是,就pass,否则就self.cell.value == self.style['value'] laiyuanjie 发表于 2024-06-05 20:46
你这样是根据self.cell.value是否是空来判断,,
...
非常抱歉,我之前的回答有误解。如果你想根据`self.style`是否为`None`来判断是否应用样式,可以如下进行修改:
def fun_beautify(self, sheet_name, dict):
self.sheet = self.excel
self.column_styles = dict
for self.column in self.sheet.columns:
self.column_letter = self.column.column_letter
if self.column_letter in self.column_styles:
self.style = self.column_styles
for self.cell in self.column:
self.cell.border = self.style.get('border', None)
if self.cell.value == 0 or self.cell.value == "0":
self.cell.value = None
elif self.style['value'] is not None:
self.cell.value = self.style['value']
if self.style is not None:
self.cell.font = self.style.get('font')
self.cell.alignment = self.style.get('alignment')
self.sheet.row_dimensions.height = 27# 调整行高
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-6-5 20:46
非常抱歉,我之前的回答有误解。如果你想根据`self.style`是否为`None`来判断是否应用样式,可以如下进 ...
if self.style["value"] is not None:
KeyError: 'value' laiyuanjie 发表于 2024-06-05 20:52
if self.style is not None:
KeyError: 'value'
非常抱歉,我之前的回答有误。在`self.column_styles`字典中,并没有`value`这个键值对应的数据。你可以单独针对C列和E列进行特殊处理,给它们分别应用你想要的公式。以下是修改后的代码示例:
def fun_beautify(self, sheet_name, dict):
self.sheet = self.excel
self.column_styles = dict
for self.column in self.sheet.columns:
self.column_letter = self.column.column_lette
if self.column_letter in self.column_styles:
self.style = self.column_styles
if self.style is not None:
self.sheet.column_dimensions.width = self.style['width']
for self.cell in self.column:
self.cell.border = self.style['border']
self.cell.font = self.style['font']
self.cell.alignment = self.style['alignment']
self.sheet.row_dimensions.height = 27
if self.column_letter == 'C':
self.cell.value = "your_formula_for_C_column"
elif self.column_letter == 'E':
self.cell.value = "your_formula_for_E_column"
请将 `your_formula_for_C_column` 和 `your_formula_for_E_column` 替换为你想要应用的具体公式。注意,需要将这些公式以字符串的形式赋值给相应的单元格。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-6-5 20:52
非常抱歉,我之前的回答有误。在`self.column_styles`字典中,并没有`value`这个键值对应的数据。你可 ...
不用了,,我知道为什么了,,因为我这个模版是套了5个美化方案的,刚才只在一个方案里面增加了value,,另外四个没有,,,现在把另外4个加上value之后就可以了 laiyuanjie 发表于 2024-06-05 21:11
不用了,,我知道为什么了,,因为我这个模版是套了5 ...
好的,很高兴你找到问题所在并解决了。如果还有其他问题,欢迎随时向我提问。祝你编程顺利!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
1
[2]