xlwings文档学习--第7章Data structures 数据结构

In [1]:
# 导入基本包
import xlwings as xw
import numpy as np
import pandas as pd
In [4]:
# 打开目标文件
wb = xw.Book(r'C:\Users\Track1\PycharmProjects\xlwing\xlwings_if\xlwings_if.xlsm')
In [5]:
import datetime as dt
In [6]:
sht = wb.sheets('sheet1')
In [7]:
sht
Out[7]:

7.1 Single cells单个单元格的数据类型

单个单元格的数据类型可以是float、str、None或者日期类型,取决于该单元格的值是数字、字符、空或者日期。

In [8]:
sht.range('a1').value = 1
In [9]:
sht.range('a1').value
Out[9]:
1.0
In [12]:
type(sht.range('a1').value)
Out[12]:
float
In [13]:
sht.range('a2').value = 'hello'
In [14]:
sht.range('a2').value
Out[14]:
'hello'
In [15]:
type(sht.range('a2').value)
Out[15]:
str
In [16]:
sht.range('a3').value is None
Out[16]:
True
In [17]:
type(sht.range('a3').value)
Out[17]:
NoneType
In [19]:
sht.range('a4').value = dt.datetime(2018,6,18)
In [20]:
sht.range('a4').value
Out[20]:
datetime.datetime(2018, 6, 18, 0, 0)
In [22]:
type(sht.range('a4').value)
Out[22]:
datetime.datetime

7.2 List 列表

一维数组

In [23]:
sht.clear()
In [24]:
sht.range('a1').value = [[1],[2],[3],[4]]  # 有列方向信息
In [25]:
sht.range('a1').expand().value  # 输出列表已经丢失了列方向信息
Out[25]:
[1.0, 2.0, 3.0, 4.0]
In [26]:
sht.range('a1').value = [1,3,4,5]
In [29]:
sht.range('a1:d1').value
Out[29]:
[1.0, 3.0, 4.0, 5.0]

要强迫单个单元格也返回列表,如下

In [30]:
sht.range('a1').options(ndim=1).value
Out[30]:
[1.0]
In [31]:
sht.range('a1').options(ndim=2).value
Out[31]:
[[1.0]]

二维数组

如果行或列方向信息需要保留下来,则在options中设定ndim

In [32]:
sht.range('a1:a4').options(ndim=2).value
Out[32]:
[[1.0], [2.0], [3.0], [4.0]]
In [33]:
sht.range('a1:d1').options(ndim=2).value
Out[33]:
[[1.0, 3.0, 4.0, 5.0]]

二维Range会自动的返回为列表。当把列表赋值给Excel Range时,制定左上方的单元格位置就足够了。

In [34]:
sht.range('a10').value = [['foo1','foo2','foo3'],[10,20,30]]
In [35]:
sht.range((10,1),(11,3)).value
Out[35]:
[['foo1', 'foo2', 'foo3'], [10.0, 20.0, 30.0]]

7.3 单元格区域扩展

方法一:expand()

In [36]:
sht.range('a1').expand('table').value
Out[36]:
[[1.0, 3.0, 4.0, 5.0],
 [2.0, None, None, None],
 [3.0, None, None, None],
 [4.0, None, None, None]]
In [37]:
sht.range('a1').expand('right').value
Out[37]:
[1.0, 3.0, 4.0, 5.0]
In [38]:
sht.range('a1').expand('down').value
Out[38]:
[1.0, 2.0, 3.0, 4.0]

方法二:options(expand=‘table/right/down...’)

In [40]:
sht.range('a1').options(expand='table').value
Out[40]:
[[1.0, 3.0, 4.0, 5.0],
 [2.0, None, None, None],
 [3.0, None, None, None],
 [4.0, None, None, None]]
In [41]:
sht.range('a1').options(expand='right').value
Out[41]:
[1.0, 3.0, 4.0, 5.0]

7.4 NumPy arrays

In [43]:
sht.clear()
In [44]:
sht.range('a1').value = np.eye(3)
In [45]:
sht.range('a1').options(np.array, expand='table').value
Out[45]:
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

7.5 Pandas DataFrames

In [46]:
arr = sht.range('a1').options(np.array, expand='table').value
In [47]:
df = pd.DataFrame(arr,columns=['A','B','C'])
In [48]:
df
Out[48]:
  A B C
0 1.0 0.0 0.0
1 0.0 1.0 0.0
2 0.0 0.0 1.0
In [52]:
sht.range('a5').value = df
In [51]:
sht.range('a5').options(pd.DataFrame, expand='table').value
Out[51]:
  A B C
0.0 1.0 0.0 0.0
1.0 0.0 1.0 0.0
2.0 0.0 0.0 1.0
In [53]:
sht.range('a10').options(index=False).value = df
In [54]:
sht.range('a15').options(index=False,header=False).value = df

Pandas Series

In [55]:
s = pd.Series([1.1,3.3,5.,np.nan,6.,8.], name='myseries')
In [56]:
s
Out[56]:
0    1.1
1    3.3
2    5.0
3    NaN
4    6.0
5    8.0
Name: myseries, dtype: float64
In [57]:
sht.clear()
In [59]:
sht.range('a1').value = s
In [60]:
sht.range('a1').options(pd.Series,expand='table').value
Out[60]:
0.0    1.1
1.0    3.3
2.0    5.0
3.0    NaN
4.0    6.0
5.0    8.0
Name: myseries, dtype: float64

你可能感兴趣的:(xlwings文档学习--第7章Data structures 数据结构)