python - 在 xlwings 中创建并命名表

标签 python excel xlwings

我正在尝试使用xlwings从我的一些Python代码连接Excel,不幸的是只找到了有关访问/重新格式化已经存在 Excel表的stackoverflow线程或文档,而不是从头开始创建新的。

编辑:根据 David Zemen 的答案添加的解决方案(可以使用 ListObject 属性的其他 getter 和 setter here

import xlwings

df = ... # initialising some pandas DataFrame

book = xlwings.Book()
ws = book.sheets.active
ws.range("A1").options(index=False).value = df

# TODO: Create table
# downside: does not seem to be possible to define multiple tables
#           within a Sheet (based on explicit ranges)
tbl = ea_sheet.api.ListObjects.Add(1) 


# TODO: Set the name/formatting of the table
tbl.DisplayName = "tabname"  # sets the tablename

我知道我可以使用 ws.range("A1").expand('table') 扩展范围选择,并且知道我可以使用 .name 范围属性将它们定义为命名范围。

但是,xlwings 是否提供了从范围创建表格的任何方法(类似于在 Excel UI 中使用“主页 - 格式化为表格”)?

最佳答案

我不确定 xlwings 是否直接支持 ListObjects 的创建,但因为它公开了 api ,你可以尝试这样的事情:

xlSrcRange = 1
xlYes = 1
ws.range("A1").options(index=False).value = df
tbl_range = ws.range("A1").expand('table')
ws.api.ListObjects.Add(xlSrcRange, tbl_range, xlListObjectHasHeaders=xlYes)

不幸的是,这似乎不起作用并且默默地失败了。

import xlwings as xw
import pandas as pd
import numpy as np
# creating a dummy dataframe
data = np.array(np.random.randint(0,100,(3,4)))
columns = ['A','B','A','C']
index = ['Row 1', 'Row 2', 'Row 3']
frame = pd.DataFrame(data, index=index, columns=columns)
book = xw.Book()
ws = book.sheets.active
ws.range("A1").options(index=False).value = frame
tbl_range = ws.range("A1").expand('table')
ws.api.ListObjects.Add(1, tbl_range)  ## This line fails, but no error is raised. 

我怀疑将 xlwings Range 作为第二个参数传递给 Add 方法时出现问题。

我尝试了其他一些方法,如果我们省略范围参数,则当我运行它时,ws.api 调用似乎可以工作(需要注意的是,当前的 ActiveCell/选择必须在 table 面积/使用范围):

ws.api.ListObjects.Add(1)

enter image description here

最后,我能够让它与 ListObjects.Add 方法一起使用,但使用 .api 传递有效的 Excel范围而不是 xlwings 范围:

ws.api.ListObjects.Add(1, ws.api.Range(tbl_range.address))

关于python - 在 xlwings 中创建并命名表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57478995/

相关文章:

python - 遍历文件夹,提取不带扩展名的文件名并在 Python 中分配为 API 变量名

python - 属性和 __getattr__ 与 AttributeError 的兼容性问题

excel - VBA许多按钮指向同一个_Click sub

python - Excel 加载项未经同意被删除

python - Pandas - 比较正值/负值

Java Python 消息签名与验证

python - 如何设置PythonPath/UDF_Modules?

python - float 转换为从 .dat 文件读取的符号。不确定编码

excel - 一旦我在 excel 中使用了回归函数,我如何找出它使用的公式 (y =mx +b)

excel - 在 excel/google 电子表格中将 url 剥离为基本 url