当前位置: 首页 > 面试题库 >

使用Python将宏注入电子表格

沈树
2023-03-14
问题内容

我有一个宏,希望使用一堆现有的电子表格。唯一的问题是,有如此多的电子表格,手工完成将非常耗时!

我已经编写了一个Python脚本来使用pyWin32访问所需的文件,但是我似乎无法找到一种使用它来添加宏的方法。

这里有一个类似的问题给出了这个答案(不是Python,但看起来它仍然使用COM),但是我的COM对象似乎没有名为VBProject的成员:

Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible = True 
objExcel.DisplayAlerts = False 
Set  objWorkbook = objExcel.Workbooks.Open("C:\scripts\test.xls") 
   Set xlmodule = objworkbook.VBProject.VBComponents.Add(1)  
   strCode = _ 
   "sub test()" & vbCr & _ 
   "   msgbox ""Inside the macro"" " & vbCr & _ 
   "end sub" 
   xlmodule.CodeModule.AddFromString strCode 
objWorkbook.SaveAs "c:\scripts\test.xls" 
objExcel.Quit

我也忘了提一下,尽管这不是Python,但我希望可以通过COM对象获得类似的对象成员。


问题答案:

这是转换后的代码。您可以使用win32com或comtypes软件包。

import os
import sys

# Import System libraries
import glob
import random
import re

sys.coinit_flags = 0 # comtypes.COINIT_MULTITHREADED

# USE COMTYPES OR WIN32COM
#import comtypes
#from comtypes.client import CreateObject

# USE COMTYPES OR WIN32COM
import win32com
from win32com.client import Dispatch

scripts_dir = "C:\\scripts"
conv_scripts_dir = "C:\\converted_scripts"
strcode = \
'''
sub test()
   msgbox "Inside the macro"
end sub
'''

#com_instance = CreateObject("Excel.Application", dynamic = True) # USING COMTYPES
com_instance = Dispatch("Excel.Application") # USING WIN32COM
com_instance.Visible = True 
com_instance.DisplayAlerts = False

for script_file in glob.glob(os.path.join(scripts_dir, "*.xls")):
    print "Processing: %s" % script_file
    (file_path, file_name) = os.path.split(script_file)
    objworkbook = com_instance.Workbooks.Open(script_file)
    xlmodule = objworkbook.VBProject.VBComponents.Add(1)
    xlmodule.CodeModule.AddFromString(strcode.strip())
    objworkbook.SaveAs(os.path.join(conv_scripts_dir, file_name))

com_instance.Quit()


 类似资料:
  • 问题内容: 我正在寻找使用openpyxl将行插入电子表格的最佳方法。 实际上,我有一个电子表格(Excel 2007),该电子表格具有标题行,其后最多(数千)行数据。我希望将行插入为实际数据的第一行,因此在标题之后。我的理解是,附加功能适合于将内容添加到 结尾 的文件。 阅读有关openpyxl和xlrd(以及xlwt)的文档,除了手动循环浏览内容并将其插入新表(在插入所需行之后)之外,我找不到

  • 问题内容: 我需要将程序中的一些数据写入电子表格。我在网上搜索过,似乎有很多可用的软件包(xlwt,XlsXcessive,openpyxl)。其他人则建议写入.csv文件(从未使用过CSV,也不真正了解它是什么)。 该程序非常简单。我有两个列表(浮点数)和三个变量(字符串)。我不知道两个列表的长度,它们的长度可能不一样。 粉色列将具有第一个列表的值,绿色列将具有第二个列表的值。 那么最好的方法是

  • 我是Python新手。我需要将程序中的一些数据写入电子表格。我在网上搜索过,似乎有很多可用的软件包(xlwt、XlsXcessive、openpyxl)。其他人建议写信给一家公司。csv文件(从未使用过csv,也不了解它是什么)。 程序非常简单。我有两个列表(float)和三个变量(string)。我不知道这两个列表的长度,它们可能不会是相同的长度。 我希望布局如下图: 粉红色列将具有第一个列表的

  • 问题内容: 给定键和工作表ID(),您能否生成一个Python示例,说明如何下载Google Docs电子表格?我不能 我已经搜索过API的版本1,版本2和版本3。我没有运气,我无法弄清楚他们编译过的类似ATOM的供稿API,私有方法说我未经授权,而且我不想自己编写整个Google Login身份验证系统。由于挫败感,我要面对自己。 我有一些电子表格,我想这样访问它们: 请保存我的脸。 更新1:

  • 我已经通过谷歌官方文档《开发者指南》API中提到的一个简单Java代码成功地在我的Google Drive帐户的现有电子表格中创建了一个新的工作表,但我想通过Java代码在我的Google Drive帐户中创建一个新的电子表格。在链接中,他们没有提到这方面的任何示例代码。我已经在Spreadservice类中看到了不同的可用方法。 如何使用Google电子表格API实现这一点?

  • 问题内容: 我遇到了一个非常奇怪的问题。我有一个golang服务器,并且正在使用net / smtp发送电子邮件。一切顺利,直到我们意识到一些额外的信息被注入到电子邮件中,雅虎才开始忽略我们的电子邮件。无论如何,为我们的信息主体发送的信息是: 然后将其发送到Amazon SES,我们用来发送电子邮件的帐户托管在godaddy上。当电子邮件到达时,我使用gmail显示原始邮件正文,我得到以下信息: