关于使用xlwings保存xlsm文件出错的问题
Question about error when saving xlsm file using xlwings
我想通过xlwings打开一个xlsm文件,然后编辑并保存。但是,也出现了一些问题。
如果我 运行 代码没有 excel 文件工作,或者只是打开另一个 excel 文件而不编辑 excel 文件,它工作正常。但是,如果我打开一个 Excel 文件并做一些工作,例如打开一个空白 Excel 文件并在单元格 A1 中输入 'test' 和 运行 代码,有时它有效,但有时会在第三行无响应。(wb_xl = xw.Book(copy)) 这种情况下,代码不会在无响应状态下从第三行跳转。更有意义的是代码在某些情况下工作正常。
我想知道代码何时在所有情况下都能正常工作。
还有一个问题。
如果在使用另一个 Excel 时执行此代码,则仅应终止 wb_xl。我不希望另一个 Excel 被关闭。我只想退出 wb_xl。但是,当执行 app.quit() 代码时,所有打开的 Excel 都会关闭。在这种情况下,我怎样才能只关闭通过代码打开的 Excel(wb_xl) 而不关闭正在工作的 Excel?
import xlwings as xw
copy = 'C:/Users/ijung/Desktop/210919_Mk_Lot_test/210922_101test.xlsm'
wb_xl = xw.Book(copy) #sometimes no response in this line
ws_xl = wb_xl.sheets['Main']
app = xw.apps.active
ws_xl.range('A1').value = 'test'
wb_xl.save()
app.quit()
#wb_xl.app.kill()
#wb_xl.close()
我也用过openpyxl。但是在wb_open.save(copy)这部分,出现了xml.etree.ElementTree.ParseError: mismatched tag: line 20, column 8这样的错误。当我使用xlsx时,保存正常,但是当我使用xlsm时,出现错误。
import openpyxl
wb_open = openpyxl.load_workbook(copy, read_only = False, keep_vba = True)
ws_open = wb_open.active
ws_open.cell(1,1).value = 'test'
wb_open.save(copy) #error
wb_open.close()
因此,此代码的目的是通过执行此代码打开 xlsm 文件,即使在使用另一个 Excel 时也是如此,编辑并保存并仅关闭此 xlsm file.However,使用多个包并搜索多个站点无法解决 problem.I 因这个问题而承受很大压力的问题。任何帮助将不胜感激。请帮我。
提前致谢。
openpyxl 不适用于包含表单对象的 xlsm 文件
我认为问题出在 app.quit()
您正在关闭 excel 实例,只需使用 wb_xl.close()
import xlwings as xw
copy = 'C:/Users/ijung/Desktop/210919_Mk_Lot_test/210922_101test.xlsm'
wb_xl = xw.Book(copy) #sometimes no response in this line
ws_xl = wb_xl.sheets['Main']
#app = xw.apps.active # don't needed
ws_xl.range('A1').value = 'test'
wb_xl.save()
wb_xl.close()
这本书应该合上,看看这个post有有趣的答案
我想通过xlwings打开一个xlsm文件,然后编辑并保存。但是,也出现了一些问题。
如果我 运行 代码没有 excel 文件工作,或者只是打开另一个 excel 文件而不编辑 excel 文件,它工作正常。但是,如果我打开一个 Excel 文件并做一些工作,例如打开一个空白 Excel 文件并在单元格 A1 中输入 'test' 和 运行 代码,有时它有效,但有时会在第三行无响应。(wb_xl = xw.Book(copy)) 这种情况下,代码不会在无响应状态下从第三行跳转。更有意义的是代码在某些情况下工作正常。 我想知道代码何时在所有情况下都能正常工作。
还有一个问题。 如果在使用另一个 Excel 时执行此代码,则仅应终止 wb_xl。我不希望另一个 Excel 被关闭。我只想退出 wb_xl。但是,当执行 app.quit() 代码时,所有打开的 Excel 都会关闭。在这种情况下,我怎样才能只关闭通过代码打开的 Excel(wb_xl) 而不关闭正在工作的 Excel?
import xlwings as xw
copy = 'C:/Users/ijung/Desktop/210919_Mk_Lot_test/210922_101test.xlsm'
wb_xl = xw.Book(copy) #sometimes no response in this line
ws_xl = wb_xl.sheets['Main']
app = xw.apps.active
ws_xl.range('A1').value = 'test'
wb_xl.save()
app.quit()
#wb_xl.app.kill()
#wb_xl.close()
我也用过openpyxl。但是在wb_open.save(copy)这部分,出现了xml.etree.ElementTree.ParseError: mismatched tag: line 20, column 8这样的错误。当我使用xlsx时,保存正常,但是当我使用xlsm时,出现错误。
import openpyxl
wb_open = openpyxl.load_workbook(copy, read_only = False, keep_vba = True)
ws_open = wb_open.active
ws_open.cell(1,1).value = 'test'
wb_open.save(copy) #error
wb_open.close()
因此,此代码的目的是通过执行此代码打开 xlsm 文件,即使在使用另一个 Excel 时也是如此,编辑并保存并仅关闭此 xlsm file.However,使用多个包并搜索多个站点无法解决 problem.I 因这个问题而承受很大压力的问题。任何帮助将不胜感激。请帮我。 提前致谢。
openpyxl 不适用于包含表单对象的 xlsm 文件
我认为问题出在 app.quit()
您正在关闭 excel 实例,只需使用 wb_xl.close()
import xlwings as xw
copy = 'C:/Users/ijung/Desktop/210919_Mk_Lot_test/210922_101test.xlsm'
wb_xl = xw.Book(copy) #sometimes no response in this line
ws_xl = wb_xl.sheets['Main']
#app = xw.apps.active # don't needed
ws_xl.range('A1').value = 'test'
wb_xl.save()
wb_xl.close()
这本书应该合上,看看这个post有有趣的答案