Skip to content

Commit b88bd61

Browse files
committed
p3
1 parent 3ed91f0 commit b88bd61

File tree

1 file changed

+31
-30
lines changed

1 file changed

+31
-30
lines changed

234.md

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
#电子表格
44

5-
一提到电子表格,可能立刻想到的是excel。殊不知,电子表格,还是“历史悠久”的呢,比word要长久多了。根据维基百科的记载整理一个简史:
5+
一提到电子表格,可能立刻想到的是excel。殊不知,电子表格“历史悠久”,比Word要长久多了。根据维基百科的记载整理一个简史:
66

77
>VisiCalc是第一个电子表格程序,用于苹果II型电脑。由丹·布李克林(Dan Bricklin)和鮑伯·法蘭克斯頓(Bob Frankston)發展而成,1979年10月跟著蘋果二號電腦推出,成為蘋果二號電腦上的「殺手應用軟體」。
88
@@ -20,15 +20,15 @@
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

Comments
 (0)