Python利用xlwt,xlrd操做Excel

前面介绍了Python 利用xlrs读取Excel文件,今天接着介绍如何写Excel文件,用到的工具包为xlwt(by John Machin)。

基本部分

在写入Excel表格以前,你必须初始化workbook对象,而后添加一个workbook对象。好比:python

?
1
2
3
import xlwt
wbk = xlwt.Workbook()
sheet = wbk.add_sheet( 'sheet 1' )

这样表单就被建立了,写入数据也很简单:工具

?
1
2
# indexing is zero based, row then column
sheet.write( 0 , 1 , 'test text' )

以后,就能够保存文件(这里不须要想打开文件同样须要close文件):oop

?
1
wbk.save( 'test.xls' )

深刻探索

worksheet对象,当你更改表单内容的时候,会有警告提示。post

?
1
2
3
4
5
6
sheet.write( 0 , 0 , 'test' )
sheet.write( 0 , 0 , 'oops' )
 
# returns error:
# Exception: Attempt to overwrite cell:
# sheetname=u'sheet 1' rowx=0 colx=0

解决方式:使用cell_overwrite_ok=True来建立worksheet:ui

?
1
2
3
sheet2 =  wbk.add_sheet( 'sheet 2' , cell_overwrite_ok = True )
sheet2.write( 0 , 0 , 'some text' )
sheet2.write( 0 , 0 , 'this should overwrite' )

这样你就能够更改表单2的内容了。this

更多

?
1
2
3
4
5
6
7
8
9
10
11
12
13
# Initialize a style
style = xlwt.XFStyle()
 
# Create a font to use with the style
font = xlwt.Font()
font.name = 'Times New Roman'
font.bold = True
 
# Set the style's font to this new one you set up
style.font = font
 
# Use the style when writing
sheet.write( 0 , 0 , 'some bold Times text' , style)

xlwt 容许你每一个格子或者整行地设置格式。还能够容许你添加连接以及公式。其实你能够阅读源代码,那里有不少例子:spa

  • dates.py, 展现如何设置不一样的数据格式
  • hyperlinks.py, 展现如何建立超连接 (hint: you need to use a formula)
  • merged.py, 展现如何合并格子
  • row_styles.py, 展现如何应用Style到整行格子中.

例子

这里演示的数据并非很容直接导入Excel:excel

20 Sep, 263, 1148,   0,   1,   0,   0,   1,   12.1,   13.9, 1+1, 19.9
20 Sep, 263, 1118,   0,   1,   0, 360,   0,   14.1,   15.3, 1+1, 19.9
20 Sep, 263, 1048,   0,   1,   0,   0,   0,   14.2,   15.1, 1+1, 19.9
20 Sep, 263, 1018,   0,   1,   0, 360,   0,   14.2,   15.9, 1+1, 19.9
20 Sep, 263, 0948,   0,   1,   0,   0,   0,   14.4,   15.3, 1+1, 19.9code

第一个逗号以前数据表示日期,第二列表示今年的第几天(可忽略),咱们感兴趣的是第九列的温度数据。咱们的目的是把感兴趣的数字写入Excel: 第一列为时间,第二列为温度。首先你要把上面的数据保存在一个weather.data.example文件中。orm

而后运行下面的代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
'''
Script to convert awkwardly-formatted weather data
into an Excel spreadsheet using Python and xlwt.
'''
 
from datetime import datetime
import xlwt
 
# Create workbook and worksheet
wbk = xlwt.Workbook()
sheet = wbk.add_sheet( 'temperatures' )
 
# Set up a date format style to use in the
# spreadsheet
excel_date_fmt = 'M/D/YY h:mm'
style = xlwt.XFStyle()
style.num_format_str = excel_date_fmt
 
# Weather data has no year, so assume it's the current year.
year = datetime.now().year
 
# Convert year to a string because we'll be
# building a date string below
year = str (year)
 
# The format of the date string we'll be building
python_str_date_fmt = '%d %b-%H%M-%Y'
 
row = 0  # row counter
f = open ( 'c:/baidu/weather.data.example' )
for line in f:
     # separate fields by commas
     L = line.rstrip().split( ',' )
 
     # skip this line if all fields not present
     if len (L) < 12 :
         continue
 
     # Fields have leading spaces, so strip 'em
     date = L[ 0 ].strip()
     time = L[ 2 ].strip()
 
     # Datatypes matter. If we kept this as a string
     # in Python, it would be a string in the Excel sheet.
     temperature = float (L[ 8 ])
 
     # Construct a date string based on the string
     # date format  we specified above
     date_string = date + '-' + time + '-' + year
 
     # Use the newly constructed string to create a
     # datetime object
     date_object = datetime.strptime(date_string,
                                     python_str_date_fmt)
 
     # Write the data, using the style defined above.
     sheet.write(row, 0 ,date_object, style)
     sheet.write(row, 1 ,temperature)
 
     row + = 1
 
wbk.save( 'c:/baidu/reformatted.data.xls' )

首先,打开workbook;

?
1
2
import xlrd
wb = xlrd.open_workbook( 'myworkbook.xls' )

检查表单名字:

?
1
wb.sheet_names()

获得第一张表单,两种方式:索引和名字

?
1
2
sh = wb.sheet_by_index( 0 )
sh = wb.sheet_by_name(u 'Sheet1' )

递归打印出每行的信息:

?
1
2
for rownum in range (sh.nrows):
     print sh.row_values(rownum)

若是只想返回第一列数据:

?
1
first_column = sh.col_values( 0 )

经过索引读取数据:

?
1
2
cell_A1 =  sh.cell( 0 , 0 ).value
cell_C4 = sh.cell(rowx = 3 ,colx = 2 ).value

注意:这里的索引都是从0开始的。

这里给个完整的例子:

?
1
2
3
4
5
6
7
8
import xlrd
 
wb = xlrd.open_workbook( 'c:/baidu/hello.xls' )
sh = wb.sheet_by_index( 0 )
for rownum in range (sh.nrows):
     print sh.row_values(rownum)
 
print sh.cell( 3 , 4 ).value

执行结果:

C:\Development\python26>python c:/baidu/xlrsExcel.py [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] [2.0, 3.0, 4.0, 5.0, 6.0, 7.0] [3.0, 4.0, 5.0, 6.0, 7.0, 8.0] [4.0, 5.0, 6.0, 7.0, 8.0, 9.0] [5.0, 6.0, 7.0, 8.0, 9.0, 10.0] [6.0, 7.0, 8.0, 9.0, 10.0, 11.0] [7.0, 8.0, 9.0, 10.0, 11.0, 12.0] [8.0, 9.0, 10.0, 11.0, 12.0, 13.0] [9.0, 10.0, 11.0, 12.0, 13.0, 14.0] [10.0, 11.0, 12.0, 13.0, 14.0, 15.0] 8.0

相关文章
相关标签/搜索