以下是我的源代码。
# -*- coding: utf-8 -*-
# 主题:自动化办公excel处理及数据分析
# 主题:1、怎么创建表格 2、添加元素 3、取出元素 4、设置颜色
# 学生: 邓文标
from openpyxl import Workbook #导入excel工具包模块
from openpyxl.chart import PieChart,Reference #导入饼图及填充模块
#import openpyxl
#--------------1、怎么创建表格---------------------
#创建一个excel文件
wb = Workbook() #注意是大写的W,创建一个表格
cs1 = wb.create_sheet('我是生命1号') #在表格中创建表,如果要查函数参考信息ctrl+左键
cs2 = wb.create_sheet('我是生命2号')
cs3 = wb.create_sheet('我是生命3号')
cs4 = wb.create_sheet('我是生命4号',2)
#--------------2、添加元素-----------------------
#添加数据(注意在写数据是不能打开excel文档,否则会无法运行)
cs4['a1'] = 666
cs4['b1'] = 777
cs4['c2'] = '邓文标'
#添加多个数据(一行多列)
num = [1,2,3,4,5,6,7,8,9]
cs4.append(num)
#添加3列,然后再添加5行(相当于添加一个小表格多行多列)
data = [
['城市名称','GDP','管理者'],
['长沙',11,'张三'],
['广州',22,'李四'],
['北京',33,'王五'],
['上海',44,'马六'],
]
#通过for循环添加到表中
for name in data:
#按行添加
cs3.append(name) #注意本行要缩进不能顶格
#----------------数据分析开始----------------------
"""python的块注释"""
#模具(数据分析饼状图)
pie = PieChart()
pie.title = '论时间的重要性'
#计算数据的表头
label = Reference(cs3,min_col=1,min_row=2,max_row=5)
#数据
datas = Reference(cs3,min_col=2,min_row=2,max_row=5)
#将饼图添加到cs3的a10位置
cs3.add_chart('a10')
"""pie.add_data(datas)
pie.set_categories(label)
"""
#----------------数据分析结束----------------------
#--------------3、取出元素-----------------------
#取表中的数(单行或单列取值)
#for name in cs4['1']: #第一行行用数字,列用字母如第一列就用'a'
#print(name.value)
#取表中的数用for循环嵌套
#方式一按多行或多列取值cs4['1':'3']或cs4['a':'c']
#方式二取表中的数(根据指定范围取数)如cs4['a2':'f3']
for name in cs4['a':'c']:
print(name)
for item in name:
print(item.value)
#--------------4、设置颜色-----------------------
#RGB颜色值转换成十六进制颜色码网址https://www.sioe.cn/yingyong/yanse-rgb-16/
cs1.sheet_properties.tabColor = 'FFFF00' #纯黄(注意是十六进制的,因此不能是#FFFF00)
cs2.sheet_properties.tabColor = '00B400' #绿色
cs3.sheet_properties.tabColor = 'FFC0CB' #粉红
cs4.sheet_properties.tabColor = '0000FF' #纯蓝
wb.save('D:\pycharmProjects\pythonProjectdemo\dwb.xlsx') #将表格保存,不写路径就是当前路径
报错信息
D:\Python38\python.exe D:/pycharmProjects/pythonProjectdemo/自动化办公excel文件处理.py
(<Cell '我是生命4号'.A1>, <Cell '我是生命4号'.A2>, <Cell '我是生命4号'.A3>)
666
None
1
(<Cell '我是生命4号'.B1>, <Cell '我是生命4号'.B2>, <Cell '我是生命4号'.B3>)
777
None
2
(<Cell '我是生命4号'.C1>, <Cell '我是生命4号'.C2>, <Cell '我是生命4号'.C3>)
None
邓文标
3
Traceback (most recent call last):
File "D:/pycharmProjects/pythonProjectdemo/自动化办公excel文件处理.py", line 70, in <module>
wb.save('D:\pycharmProjects\pythonProjectdemo\dwb.xlsx') #将表格保存,不写路径就是当前路径
File "D:\Python38\lib\site-packages\openpyxl\workbook\workbook.py", line 392, in save
save_workbook(self, filename)
File "D:\Python38\lib\site-packages\openpyxl\writer\excel.py", line 293, in save_workbook
writer.save()
File "D:\Python38\lib\site-packages\openpyxl\writer\excel.py", line 275, in save
self.write_data()
File "D:\Python38\lib\site-packages\openpyxl\writer\excel.py", line 75, in write_data
self._write_worksheets()
File "D:\Python38\lib\site-packages\openpyxl\writer\excel.py", line 218, in _write_worksheets
self._write_drawing(ws._drawing)
File "D:\Python38\lib\site-packages\openpyxl\writer\excel.py", line 136, in _write_drawing
chart._id = len(self._charts)
AttributeError: 'str' object has no attribute '_id'
Process finished with exit code 1。
将对象引用与字符串进行比较时(即使对象引用是指字符串),==特定于字符串类的运算符的特殊行为也会被忽略。
通常(不处理字符串时),Equals比较值,同时==比较对象引用。如果你正在比较的两个对象是指同一个对象的确切实例,那么两者都将返回true,但是如果一个具有相同的内容并且来自不同的源(是具有相同数据的单独实例),则只有Equals会返回true。但是,正如注释中所指出的那样,字符串是一种特殊情况,因为它覆盖了==操作符,所以当纯粹处理字符串引用(而不是对象引用)时,即使它们是单独的实例,也只会比较这些值。以下代码说明了行为中的细微差别:
string s1 = "test";
string s2 = "test";
string s3 = "test1".Substring(0, 4);
object s4 = s3;
Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s2), s1 == s2, s1.Equals(s2));
Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s3), s1 == s3, s1.Equals(s3));
Console.WriteLine("{0} {1} {2}", object.ReferenceEquals(s1, s4), s1 == s4, s1.Equals(s4));
输出是:
True True True
False True True
False False True
当==用于表达式类型时object,它将解析为System.Object.ReferenceEquals。
Equals只是一种virtual方法,并表现如此,所以被覆盖的版本将被使用(其中,string类型比较的内容)。