22
33#电子表格
44
5- 一提到电子表格,可能立刻想到的是excel。殊不知,电子表格,还是 “历史悠久”的呢,比word要长久多了 。根据维基百科的记载整理一个简史:
5+ 一提到电子表格,可能立刻想到的是excel。殊不知,电子表格“历史悠久”,比Word要长久多了 。根据维基百科的记载整理一个简史:
66
77> VisiCalc是第一个电子表格程序,用于苹果II型电脑。由丹·布李克林(Dan Bricklin)和鮑伯·法蘭克斯頓(Bob Frankston)發展而成,1979年10月跟著蘋果二號電腦推出,成為蘋果二號電腦上的「殺手應用軟體」。
88
2020
2121> 其实,除了微软的电子表格,在Linux系统中也有很好的电子表格,google也提供了不错的在线电子表格(可惜某国内不能正常访问)。
2222
23- 从历史到现在,电子表格都很广泛的用途。所以,python也要操作一番电子表格,因为有的数据,或许就是存在电子表格中 。
23+ 从历史到现在,电子表格都很广泛的用途。所以,Python也要操作一番电子表格,因为有些数据,就存在电子表格中 。
2424
25- ##openpyl
25+ ##openpyxl
2626
27- openpyl模块是解决Microsoft Excel 2007/2010之类版本中扩展名是Excel 2010 xlsx/xlsm/xltx/xltm的文件的读写的第三方库。(差点上不来气,这句话太长了。)
27+ openpyxl模块是解决Microsoft Excel 2007/2010之类版本中扩展名是Excel 2010 xlsx/xlsm/xltx/xltm的文件的读写的第三方库。
2828
2929###安装
3030
31- 安装第三方库,当然用法力无边的pip install
31+ 安装第三方库,当然用法力无边的pip install。
3232
3333 $ sudo pip install openpyxl
3434
@@ -39,15 +39,15 @@ openpyl模块是解决Microsoft Excel 2007/2010之类版本中扩展名是Excel
3939
4040###workbook和sheet
4141
42- 第一步,当然是要引入模块 ,用下面的方式:
42+ 第一步,引入模块 ,用下面的方式:
4343
4444 >>> from openpyxl import Workbook
4545
4646接下来就用` Workbook() ` 类里面的方法展开工作:
4747
4848 >>> wb = Workbook()
4949
50- 请回忆Excel文件,如果想不起来,就打开Excel,我们第一眼看到的是一个称之为工作簿(workbook)的东西,里面有几个sheet,默认是三个,当然可以随意增删。默认又使用第一个sheet 。
50+ 请回忆Excel文件,如果想不起来,就打开Excel,我们第一眼看到的是一个称之为工作簿(workbook)的东西,里面有几个sheet,默认是三个,当然可以随意增删。默认使用第一个sheet 。
5151
5252 >>> ws = wb.active
5353
@@ -57,19 +57,19 @@ openpyl模块是解决Microsoft Excel 2007/2010之类版本中扩展名是Excel
5757
5858 >>> ws1 = wb.create_sheet()
5959
60- 甚至,还可以加塞 :
60+ 甚至,还可以插队 :
6161
6262 >>> ws2 = wb.create_sheet(1)
6363
64- 排在了第二个位置 。
64+ 在第二个位置插入了一个sheet 。
6565
6666在Excel文件中一样,创建了sheet之后,默认都是以"Sheet1"、"Sheet2"样子来命名的,然后我们可以给其重新命名。在这里,依然可以这么做。
6767
6868 >>> ws.title = "python"
6969
70- ws所引用的sheet对象名字就是 "python"了。
70+ ` ws ` 所引用的sheet对象名字就是 "python"了。
7171
72- 此时,可以使用下面的方式从工作簿对象中得到sheet
72+ 此时,可以使用下面的方式从工作簿对象中得到sheet。
7373
7474 >>> ws01 = wb['python'] #sheet和工作簿的关系,类似键值对的关系
7575 >>> ws is ws01
@@ -83,41 +83,41 @@ ws所引用的sheet对象名字就是"python"了。
8383
8484整理一下到目前为止我们已经完成的工作:建立了工作簿(wb),还有三个sheet。还是显示一下比较好:
8585
86- >>> print wb.get_sheet_names()
86+ >>> print wb.get_sheet_names() #Python 3: print(wb.get_sheet_names())
8787 ['python', 'Sheet2', 'Sheet1']
8888
89- Sheet2这个sheet之所以排在了第二位 ,是因为在建立的时候,用了一个加塞的方法。这跟Excel中差不多少,如果sheet命名了 ,就按照那个名字显示,否则就默认为名字是"Sheet1"形状的(注意,第一个字母大写)。
89+ Sheet2之所以排在了第二位 ,是因为在建立的时候,用了一个插队的方法。这跟在Excel中差不多少,如果Sheet命名了 ,就按照那个名字显示,否则就默认为名字是"Sheet1"形状的(注意,第一个字母大写)。
9090
91- 也可以用循环语句,把所有的sheet名字打印出来 。
91+ 也可以用循环语句,把所有的Sheet名字打印出来 。
9292
9393 >>> for sh in wb:
94- ... print sh.title
94+ ... print sh.title #Python 3: print(sh.title)
9595 ...
9696 python
9797 Sheet2
9898 Sheet1
9999
100- 如果读者去 ` dir(wb) ` 工作簿对象的属性和方法,会发现它具有迭代的特征` __iter__ ` 方法 。说明,工作簿是可迭代的 。
100+ 如果读者 ` dir(wb) ` 工作簿对象的属性和方法,会发现它具有迭代的特征` __iter__ ` 。说明,工作簿对象是可迭代的 。
101101
102102###cell
103103
104- 为了能够清楚理解填数据的过程 ,将电子表中约定的名称以下图方式说明:
104+ 为了能够清楚理解向电子表格中增加数据的过程 ,将电子表中约定的名称以下图方式说明:
105105
106106![ ] ( ./2images/23401.jpg )
107107
108- 对于sheet,其中的cell是它的下级单位。所以,要得到某个cell,可以这样 :
108+ 对于sheet,其中的cell是它的下级单位。所以,要得到某个cell可以这样 :
109109
110110 b4 = ws['B4']
111111
112- 如果B4这个cell已经有了,用这种方法就是将它的值赋给了变量b4 ;如果sheet中没有这个cell,那么就创建这个cell对象。
112+ 如果B4这个cell已经有了,用这种方法就是将它的值赋给了变量 ` b4 ` ;如果sheet中没有这个cell,那么就创建这个cell对象。
113113
114- 请读者注意,当我们打开Excel,默认已经画好了好多cell。但是,在python操作的电子表格中 ,不会默认画好那样一个表格,一切都要创建之后才有。所以,如果按照前面的操作流程,上面就是创建了B4这个cell,并且把它作为一个对象被b4变量引用。
114+ 请读者注意,当我们打开Excel,默认已经画好了好多cell。但是,在Python操作的电子表格的情况中 ,不会默认画好那样一个表格,一切都要创建之后才有。所以,如果按照前面的操作流程,上面就是创建了B4这个cell,并且把它作为一个对象被b4变量引用。
115115
116116如果要给B4添加数据,可以这么做:
117117
118118 >>> ws['B4'] = 4444
119119
120- 因为b4引用了一个cell对象 ,所以可以利用这个对象的属性来查看其值:
120+ 因为 ` b4 ` 引用了一个cell对象 ,所以可以利用这个对象的属性来查看其值:
121121
122122 >>> b4.value
123123 4444
@@ -130,9 +130,10 @@ Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用
130130
131131 >>> a2 = ws.cell(row = 2, column = 1)
132132
133- 刚才已经提到,在建立了sheet之后 ,内存中的它并没有cell,需要程序去建立。上面都是一个一个地建立,能不能一下建立多个呢?比如要类似下面的:
133+ 刚才已经提到,在建立了Sheet之后 ,内存中的它并没有cell,需要程序去建立。上面都是一个一个地建立,能不能一下建立多个呢?比如要类似下面的:
134134
135135| A1| B1| C1|
136+ | ----| ----| ---|
136137| A2| B2| C2|
137138| A3| B3| C3|
138139
@@ -147,11 +148,11 @@ Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用
147148 (<Cell python.A2>, <Cell python.B2>, <Cell python.C2>),
148149 (<Cell python.A3>, <Cell python.B3>, <Cell python.C3>))
149150
150- 这是按照横向顺序数过来来的 ,即A1-B1-C1,然后下一横行 。还可以用下面的循环方法,一个一个地读到每个cell对象:
151+ 这是按照横向顺序读过来的 ,即A1-B1-C1,作为一个元组,然后读下一横行,再组成一个元组 。还可以用下面的循环方法,一个一个地读到每个cell对象:
151152
152153 >>> for row in ws.iter_rows("A1:C3"):
153154 ... for cell in row:
154- ... print cell
155+ ... print cell #Python 3: print(cell)
155156 ...
156157 <Cell python.A1>
157158 <Cell python.B1>
@@ -163,15 +164,15 @@ Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用
163164 <Cell python.B3>
164165 <Cell python.C3>
165166
166- 也可以用sheet对象的 ` rows ` 属性,得到按照横向顺序依次排列的cell对象(注意观察结果,因为没有进行范围限制,所以是目前sheet中所有的cell ,前面已经建立到第四行了B4,所以,要比上面的操作多一个row):
167+ 也可以用Sheet对象的 ` rows ` 属性,得到按照横向顺序依次排列的cell对象(注意观察结果,因为没有进行范围限制,所以是当前Sheet中所有的cell ,前面已经建立到第四行了B4,所以,要比上面的操作多一个row):
167168
168169 >>> ws.rows
169170 ((<Cell python.A1 >, <Cell python.B1 >, <Cell python.C1 >),
170171 (<Cell python.A2 >, <Cell python.B2 >, <Cell python.C2 >),
171172 (<Cell python.A3 >, <Cell python.B3 >, <Cell python.C3 >),
172173 (<Cell python.A4 >, <Cell python.B4 >, <Cell python.C4 >))
173174
174- 用sheet对象的 ` columns ` 属性,得到的是按照纵向顺序排列的cell对象(注意观察结果):
175+ 用Sheet对象的 ` columns ` 属性,得到的是按照纵向顺序排列的cell对象(注意观察结果):
175176
176177 >>> ws.columns
177178 ((<Cell python.A1>, <Cell python.A2>, <Cell python.A3>, <Cell python.A4>),
@@ -189,15 +190,15 @@ Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用
189190 File "<stdin >", line 2, in <module >
190191 AttributeError: 'tuple' object has no attribute 'value'
191192
192- 报错了。什么错误。关键就是没有注意观察上面的结果。tuple里面是以tuple为元素 ,再里面才是cell对象。所以,必须要“时时警醒”,常常谨慎。
193+ 报错了。关键是没有注意观察上面的结果。元组里面是以元组为元素 ,再里面才是cell对象。所以,必须要“时时警醒”,常常谨慎。
193194
194195 >>> for row in ws.rows:
195196 ... for cell in row:
196197 ... cell.value = i
197198 ... i += 1
198199 ...
199200
200- 如此,就给每个cell添加了数据。查看一下,不过要换一个属性 :
201+ 如此,就给每个cell添加了数据。查看一下,不过可以换一个属性 :
201202
202203 >>> for col in ws.columns:
203204 ... for cell in col:
@@ -236,12 +237,12 @@ Sheet2这个sheet之所以排在了第二位,是因为在建立的时候,用
236237
237238 >>> from openpyxl import load_workbook
238239 >>> wb2 = load_workbook("23401.xlsx")
239- >>> print wb2.get_sheet_names()
240+ >>> print wb2.get_sheet_names() #Python 3: print(wb2.get_sheet_names())
240241 ['python', 'Sheet2', 'Sheet1']
241242 >>> ws_wb2 = wb2["python"]
242243 >>> for row in ws_wb2.rows:
243244 ... for cell in row:
244- ... print cell.value
245+ ... print cell.value #Python 3: print(cell.value)
245246 ...
246247 1
247248 2
0 commit comments