Python表格处理

本文最后更新于:2 年前

咋说呢,帮别人统计个数据,奈何我excel是真的不会用,只能用python去处理了。我是真的佩服那些计算机二级考office还过了的人。

声明

本文档的一切内容均为本地测试结果,受限于本人知识与能力,仅供参考,如因参照本文档操作而发生任何问题,无论是否严格参照本文档操作,请恕本人概不负责。

文档中的任何观点受限于本人知识、能力及眼界,不保证理智,公正,客观。如本文档中观点与您相左,以您的意见为准。

参考原文

xlwings中文文档

导包

使用xlwings包

单个单元格

默认情况下,单个单元格返回为“float”,“unicode”,“None”或“datetime”对象,具体取决于单元格是否包含数字,字符串,是否为空或表示日期:

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> import datetime as dt
>>> sht = xw.Book().sheets[0]
>>> sht.range('A1').value = 1
>>> sht.range('A1').value
1.0
>>> sht.range('A2').value = 'Hello'
>>> sht.range('A2').value
'Hello'
>>> sht.range('A3').value is None
True
>>> sht.range('A4').value = dt.datetime(2000, 1, 1)
>>> sht.range('A4').value
datetime.datetime(2000, 1, 1, 0, 0)

列表

  • 一维列表:表示Excel中行或列的范围作为简单列表返回,这意味着一旦它们在Python中,您就丢失了有关方向的信息。 如果这是一个问题,下一点将向您展示如何保留此信息:

    1
    2
    3
    4
    5
    6
    7
    >>> sht = xw.Book().sheets[0]
    >>> sht.range('A1').value = [[1],[2],[3],[4],[5]] # 列方向(嵌套列表)
    >>> sht.range('A1:A5').value
    [1.0, 2.0, 3.0, 4.0, 5.0]
    >>> sht.range('A1').value = [1, 2, 3, 4, 5]
    >>> sht.range('A1:E1').value
    [1.0, 2.0, 3.0, 4.0, 5.0]
  • 要强制单个单元格作为列表到达,请使用:

    1
    2
    >>> sht.range('A1').options(ndim=1).value
    [1.0]
  • 二维列表:如果必须保留行或列方向,请在Range选项中设置“ndim”。 这将返回Ranges作为嵌套列表(“二维列表”):

    1
    2
    3
    4
    >>> sht.range('A1:A5').options(ndim=2).value
    [[1.0], [2.0], [3.0], [4.0], [5.0]]
    >>> sht.range('A1:E1').options(ndim=2).value
    [[1.0, 2.0, 3.0, 4.0, 5.0]]
  • 2维Range自动作为嵌套列表返回。 将(嵌套)列表分配给Excel中的Range时,只需将左上角的单元格指定为目标地址就足够了。 此示例还使用索引表示法将值读回到Python中:

    1
    2
    3
    >>> sht.range('A10').value = [['Foo 1', 'Foo 2', 'Foo 3'], [10, 20, 30]]
    >>> sht.range((10,1),(11,3)).value
    [['Foo 1', 'Foo 2', 'Foo 3'], [10.0, 20.0, 30.0]]

实例

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
import xlwings as xw

print("Hello,World!")

sht = xw.Book(r'文件名').sheets[0]

arr = sht.range((6,6),(36,48)).value

sum = []
pin = []

for i in range(len(arr)):
tmp = 0
k1 = []
k2 = []
for j in range(len(arr[i])):
arr[i][j] = arr[i][j].strip()
if arr[i][j] != '-':
tmp += float(arr[i][j])
k1.append(tmp)
k2.append(round(tmp/29,3))
sum.append(k1)
pin.append(k2)

print(sum)
print(pin)

sht.range('AW6').value = sum
sht.range('AX6').value = pin

Python表格处理
https://www.jingshan256.com/python_excel/
作者
origincat
发布于
2019年10月7日
许可协议