Azure数据块:在Python中处理Excel模板,包括图表和公式

mo49yndu  于 2023-11-21  发布在  Python
关注(0)|答案(1)|浏览(146)

我目前正在Azure数据库中进行一个项目,我需要在Python中自动执行涉及Excel模板的任务。以前,在Windows环境中,我使用openpyxl进行基本的Excel操作,并使用来自win32com.client库的Dispatch进行更高级的任务,如复制图表工作表和调整链接。
现在,我正在过渡到Azure环境,并面临复制相同工作流的挑战。具体而言,我需要:
打开Excel模板文件。将数据写入特定工作表。根据依赖于计算和新添加数据的公式操作图表。我知道在openpyxl中使用data_only=True取决于文件的出处,它可能并不总是按预期工作。
有没有人遇到过类似的情况,或者对如何在Azure环境中解决这个问题有建议(下面的reset_charts_orig函数)?任何见解或替代库都将非常感谢。
def reset_charts_orig(orig,new):“:param orig:input path:param new:output path“path1 = os.path.abspath(orig)path2 = os.path.abspath(new)

  1. xl = Dispatch("Excel.Application")
  2. xl.Visible = False
  3. wb1 = xl.Workbooks.Open(Filename=path1)
  4. wb2 = xl.Workbooks.Open(Filename=path2)
  5. ws1 = wb1.Worksheets('GrafikenJahre')
  6. ws1.Copy(Before=wb2.Worksheets('GLM'))
  7. wb2.ChangeLink(Name=path1, NewName=path2, Type=1)
  8. wb2.Close(SaveChanges=True)
  9. wb1.Close(SaveChanges=False)
  10. xl.Quit()

字符串

i5desfxk

i5desfxk1#

在Azure中,Databricks群集使用Linux,因此您无法使用仅在Microsoft Windows中受支持的pywin32,因为您只能从Windows访问Win32 API。
有关详细信息,请参阅this
所以你可以使用openpyxl来添加图表和操作。下面是添加图表的例子。
Excel中的数据。
| 0 |名字|姓氏|性别|国家|年龄|日期|ID|
| --|--|--|--|--|--|--|--|
| 1 |杜尔塞|Abril|女性|美国| 32 |2017年10月15日星期一| 1562 |
| 2 |玛拉|桥本|女性|大不列颠| 25 |16/08/2016 - 08 - 08| 1582 |
| 3 |菲利普|Gent|男性|法国| 36 |2015年5月21日星期五| 2587 |
| 4 |凯萨琳|Hanner|女性|美国| 25 |2017年10月15日星期一| 3549 |
| 5 |沙蚕目|马格伍德|女性|美国| 58 |16/08/2016 - 08 - 08| 2468 |
| 6 |加斯顿|Brumm|男性|美国| 24 |2015年5月21日星期五| 2554 |
| 7 |埃塔|赫恩|女性|大不列颠| 56 |2017年10月15日星期一| 3598 |
| 8 |厄尔恩|Melgar|女性|美国| 27 |16/08/2016 - 08 - 08| 2456 |
| 9 |利什琴扎|Weiland|女性|美国| 40 |2015年5月21日星期五| 6548 |
代码:

  1. import openpyxl
  2. from openpyxl.chart import BarChart, Reference
  3. with open("/dbfs/FileStore/tables/file_example_XLS_10.xlsx", 'rb') as f:
  4. workbook = openpyxl.load_workbook(f)
  5. worksheet = workbook['Sheet1']
  6. chart = BarChart()
  7. data = Reference(worksheet, min_col=6, min_row=2, max_col=6, max_row=11) # Age column
  8. categories = Reference(worksheet, min_col=5, min_row=2, max_col=5, max_row=11) # Country column
  9. chart.add_data(data, titles_from_data=True)
  10. chart.set_categories(categories)
  11. worksheet.add_chart(chart, "A12")
  12. workbook.save("/tmp/file_example_XLS_10.xlsx")
  13. dbutils.fs.cp("file:/tmp/file_example_XLS_10.xlsx","/mnt/jgsblob/from_databricks/sample.xlsx")

字符串
在这里,请确保在阅读文件时根据dbfs文件系统给出路径。但是由于本地API支持的限制,保存workbook.save('/dbfs/')无法工作。因此,保存它临时保存在本地文件系统中,并使用dbutils.fs.cp将其复制到dbfs或挂载的存储帐户。有关此方面的详细信息,请参阅this解决方案。
输出量:
x1c 0d1x的数据

展开查看全部

相关问题