将 excel 电子表格中的单元格范围保存为 python 中的图像
Save cellrange from excel spreadsheet as image in python
我目前正在开发一个 Python 脚本,该脚本使用 excel2image 模块从 Excel 文件中保存屏幕截图。
我的代码很简单:
import excel2img
excel2img.export_img(Workpath + "/" + "CB_TEMP.xlsx", "alarm_BB1.png", "Deckblatt", "A2:C20")
不幸的是,我总是收到以下错误消息:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-18-a119e849f4d5> in <module>
----> 1 excel2img.export_img(Workpath + "/" + "CB_TEMP.xlsx", "alarm_BB1.png", "Deckblatt", "A2:C20")
~\anaconda3\lib\site-packages\excel2img\excel2img.py in export_img(fn_excel, fn_image, page, _range)
111
112 # See
--> 113 for shape in rng.parent.Shapes: pass
114
115 xlScreen, xlPrinter = 1, 2
~\anaconda3\lib\site-packages\win32com\client\__init__.py in __getattr__(self, attr)
471 args=self._prop_map_get_.get(attr)
472 if args is None:
--> 473 raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr))
474 return self._ApplyTypes_(*args)
475
AttributeError: '<win32com.gen_py.Microsoft Excel 16.0 Object Library.Range instance at 0x2460934736048>' object has no attribute 'parent'
我已经尝试了几种解决方法,但我无法让它工作。有时它像魔术一样工作,但主要是在重新启动并删除 C:/Users/patrick/AppData/Temp/gen_py.
中的数据之后
我感觉代码与我在将 XLSB 文件转换为 XLSX 文件之前在函数中使用的 win32com 模块发生冲突:
def ConvertExcel(excel_filepath, Workpath):
excel = win32com.client.gencache.EnsureDispatch('Excel.Application')
xlsb_doc = excel.Workbooks.Open(os.path.abspath(excel_filepath))
excel_sheets = os.path.abspath(Workpath) + "\CB_TEMP.xlsx"
xlsb_doc.SaveAs(excel_sheets, 51)
xlsb_doc.Close()
excel.Quit()
del excel
return excel_sheets
也许有人可以帮助我吗?
亲切的问候,
帕特里克
我通过删除 excel2img 模块修复了这个问题。
我用 Pillow 在 xlwings 中编写了新代码,它比在 excel2img 中运行得更快:
import xlwings as xw
from PIL import ImageGrab
try:
excel_app = xw.App(visible=False)
excel_book = excel_app.books.open(excel_filepath)
for image in df_img.index:
excel_book.sheets[df_img.at[image, "sheet_name"]][
df_img.at[image, "Range"]].copy(destination=None)
img = ImageGrab.grabclipboard()
img.save(df_img.at[image, "Bild"], 'JPEG')
excel_book.close()
excel_app.quit()
excel_app.kill()
except:
pass
我目前正在开发一个 Python 脚本,该脚本使用 excel2image 模块从 Excel 文件中保存屏幕截图。
我的代码很简单:
import excel2img
excel2img.export_img(Workpath + "/" + "CB_TEMP.xlsx", "alarm_BB1.png", "Deckblatt", "A2:C20")
不幸的是,我总是收到以下错误消息:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-18-a119e849f4d5> in <module>
----> 1 excel2img.export_img(Workpath + "/" + "CB_TEMP.xlsx", "alarm_BB1.png", "Deckblatt", "A2:C20")
~\anaconda3\lib\site-packages\excel2img\excel2img.py in export_img(fn_excel, fn_image, page, _range)
111
112 # See
--> 113 for shape in rng.parent.Shapes: pass
114
115 xlScreen, xlPrinter = 1, 2
~\anaconda3\lib\site-packages\win32com\client\__init__.py in __getattr__(self, attr)
471 args=self._prop_map_get_.get(attr)
472 if args is None:
--> 473 raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr))
474 return self._ApplyTypes_(*args)
475
AttributeError: '<win32com.gen_py.Microsoft Excel 16.0 Object Library.Range instance at 0x2460934736048>' object has no attribute 'parent'
我已经尝试了几种解决方法,但我无法让它工作。有时它像魔术一样工作,但主要是在重新启动并删除 C:/Users/patrick/AppData/Temp/gen_py.
中的数据之后我感觉代码与我在将 XLSB 文件转换为 XLSX 文件之前在函数中使用的 win32com 模块发生冲突:
def ConvertExcel(excel_filepath, Workpath):
excel = win32com.client.gencache.EnsureDispatch('Excel.Application')
xlsb_doc = excel.Workbooks.Open(os.path.abspath(excel_filepath))
excel_sheets = os.path.abspath(Workpath) + "\CB_TEMP.xlsx"
xlsb_doc.SaveAs(excel_sheets, 51)
xlsb_doc.Close()
excel.Quit()
del excel
return excel_sheets
也许有人可以帮助我吗?
亲切的问候, 帕特里克
我通过删除 excel2img 模块修复了这个问题。
我用 Pillow 在 xlwings 中编写了新代码,它比在 excel2img 中运行得更快:
import xlwings as xw
from PIL import ImageGrab
try:
excel_app = xw.App(visible=False)
excel_book = excel_app.books.open(excel_filepath)
for image in df_img.index:
excel_book.sheets[df_img.at[image, "sheet_name"]][
df_img.at[image, "Range"]].copy(destination=None)
img = ImageGrab.grabclipboard()
img.save(df_img.at[image, "Bild"], 'JPEG')
excel_book.close()
excel_app.quit()
excel_app.kill()
except:
pass