我开始使用XLWings(根本不是我喜欢Excel,但这是我必须做的事情).问题是我找不到让Python打开工作簿而不显示它的方法.
看起来旧XLWings 0.6.4中Workbooks的构造函数是xlwings.Workbook,其中一个参数是一个标记'app_visible'(参见http://docs.xlwings.org/en/v0.6.4/api.html).
但是,在新的v0.9.2工作簿中已被Book取代,而Book没有任何此类标志(http://docs.xlwings.org/en/stable/api.html).App对象确实拥有它,我认为这是要走的路.所以我编码:
import xlwings as xw
app = xw.App(visible=False)
filename = os.path.join(PATH_EXCEL_SAMPLES, r"rangosConDatos_sample01.xls")
book = xw.Book(filename)
# Do stuff with the info in the book
book.close() # Ya puedo cerrar el libro.
app.kill()
Run Code Online (Sandbox Code Playgroud)
但是,令人遗憾的是,什么时候
book = xw.Book(filename)
Run Code Online (Sandbox Code Playgroud)
执行app的'visible'属性突然变为True,并显示该书.我不知道这是一个期望的功能还是一个意外的行为.无论如何,任何想法我应该怎么做?
我一直在python中使用xlwings,并且正在努力找到复制工作表(例如模板)的正确代码.在几个地方四处寻找并阅读pywin32文档后,我找到了一个复制工作表的解决方案.我想在这里发布它,以帮助其他人搜索相同的问题,以节省他们一些时间.这适用于xlwings版本0.11.4.
__PRE__
这一切都有效,因为xlwings是pywin32的包装器,而.api调用允许访问那些在xlwings中未记录的pywin32函数.另请注意,'After'命令在工作表中不起作用,它将打开一个复制了工作表的新工作簿.这不应该造成太大的问题,因为我认为如果需要可以重新排序索引.谢谢.
我大多只使用 xlwings 打开 ( read-write) 工作簿(因为我阅读的工作簿有复杂的宏)。但是我最近开始使用 openpyxl 打开 ( read-only) 工作簿,因为我需要阅读数千个工作簿来抓取一些数据。
我注意到 xlwings 和 openpyxl 读取工作簿的方式有很大的不同。我相信 xlwings 依赖于pywin32阅读工作簿。当您阅读工作簿时xlwings.Book(<filename>),实际工作簿会打开。我有一种感觉,这是一个结果pywin32。
但是,使用openpyxl.load_workbook(<filename>)工作簿时不会出现窗口。我有一种感觉,这是不使用pywin32.
除此之外,我没有进一步了解后端如何为每个库工作。有人可以对此有所了解吗?依赖xlwings和pywin32阅读工作簿是否有好处/成本,而openpyxl不是似乎没有使用pywin32?
我使用xlwings从Excel调用python.我发现在运行我的宏时,Excel会关闭并重新打开以运行代码.它运行正常,但它减慢了速度.此外,如果未保存Excel文件,则会出现一个对话框,提示该文件已经打开,并且我将丢失未保存的更改.
有没有办法调用python而不重新打开Excel文件?
这是我的python代码(在loaddf.py中):
from xlwings import Workbook, Range, Sheet
def my_macro():
wb = Workbook.caller()
Range('A1').value = Range('A1').value + 1
Run Code Online (Sandbox Code Playgroud)
以及我的Excel文件中的VBA代码:
Sub loaddfsub()
RunPython ("import loaddf; loaddf.my_macro()")
End Sub
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
我编写了一个函数,用xlwings将数据保存在 WorkBook 中,我想适应宽度列
class VehicleClass:
def __init__(self, VehClass):
# Vehicles 4 - Vehicle Classes
self.VehClass = [VehClass]
self.VehName = []
self.ScaleFactor = []
def add(self, VehName, ScaleFactor):
self.VehClass*=1
self.VehName.append(VehName)
self.ScaleFactor.append(ScaleFactor)
def save(self):
# Vehicles 4 - Vehicle Classes
sht = wb.sheets['Vehicles 4 - Vehicle Classes']
rng = sht.range("A1").end('down').offset(1, 0)
for i, item in enumerate([self.VehClass, self.VehName, self.ScaleFactor]):
rng.offset(0, i).options(transpose=True).value = item
rng.autofit() # or rng.columns.autofit()
Run Code Online (Sandbox Code Playgroud)
但不起作用。
你有什么主意吗 ?谢谢 !
我有一个excel工作表,一些按钮和一些宏.我使用xlwings使它工作.有没有办法通过xlwings保存工作簿?我想在执行操作后提取特定的工作表,但保存的工作表是在没有生成数据的操作之前提取的工作表.
我提取所需表单的代码如下:
Set objFSO = CreateObject("Scripting.FileSystemObject")
src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
sheet_name = Wscript.Arguments.Item(1)
dir_name = Wscript.Arguments.Item(2)
file_name = Wscript.Arguments.Item(3)
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
Dim objWorkbook
Set objWorkbook = objExcel.Workbooks(src_file)
objWorkbook.Sheets(sheet_name).Copy
objExcel.DisplayAlerts = False
objExcel.ActiveWorkbook.SaveAs dir_name + file_name + ".xlsx", 51
objExcel.ActiveWorkbook.SaveAs dir_name + file_name + ".csv", 6
objWorkbook.Close False
objExcel.Quit
Run Code Online (Sandbox Code Playgroud) 我已经阅读了xlwings 的API文档,并在解释器中使用了Workbook和Sheet对象,但我无法弄清楚如何从Python调用宏.
如何使用xlwings从Python调用Excel宏?
当我执行一个Xlwings函数时,我可以保存并关闭工作簿.但我不能再关闭Excel 2016了.这是一个已知的问题?我怎样才能解决这个问题?
我使用python xlwings在Excel 2013中读取一列数据.列A中填充了数字.要将此列导入python列表py_list,我有以下代码;
import xlwings as xw
wb = xw.Book('BookName.xlsm')
sht = xw.Book('SheetName')
py_list = sht.range('A2:A40').value
Run Code Online (Sandbox Code Playgroud)
如果列数据填充在上面,则上述代码有效A2:A40.但是,列数据可以继续增长.数据可以增长并延伸到A2:A46或A2:A80.最后一行是空的.在编译时不知道此列中有多少行数据.
如何修改代码以检测最后一行的空单元格,以便可以读取数据范围py_list?
我愿意使用其他python库来读取除xlwings之外的Excel数据.我使用的是python v3.6
我试图找出如何在写入后使用 xlwings 保存并关闭现有工作簿:
import xlwings as xw
list_of_values = [1, 2, 3]
workbook_path = 'abc.xlsx'
wb = xw.Book(workbook_path)
ws = wb.sheets['sheet1']
ws.range('E35').value = list_of_values
wb.save()
wb.close()
Run Code Online (Sandbox Code Playgroud)
当我到达 时wb.save(workbook_path),出现提示:“此位置已存在名为 abc.xlsx 的文件”。你想更换它吗?
我想立即覆盖该文件而不出现提示。根据文档,wb.save()应该自动覆盖(参见: https: //docs.xlwings.org/en/v0.6.4/api.html)。我也试过了wb.save(workbook_path),但是还是出现弹窗。
感谢对此的任何帮助。
ps - 我基本上试图将数据写入预先格式化的 Excel 工作表中。如果有其他方法可以保留格式,我很乐意尝试。我已经尝试过这个,但它抛出一个错误if newCell:Easy write formatted Excel from Python: Start with Excel formatted, use it in Python, and regenerate Excel from Python