在python中检索Ms access表单属性
我想通过python检索ms access表单维度,获取“宽度”没有问题,但“高度”不是直接属性,而是由部分节的高度组成。在VBA中,这些可以通过表单获取!fName.截面(n).高度。在python中,这是失败的。是否有人知道直接访问这些属性。使用的代码是在python中检索Ms access表单属性,python,ms-access,Python,Ms Access,我想通过python检索ms access表单维度,获取“宽度”没有问题,但“高度”不是直接属性,而是由部分节的高度组成。在VBA中,这些可以通过表单获取!fName.截面(n).高度。在python中,这是失败的。是否有人知道直接访问这些属性。使用的代码是 formNames = [] strDbName = 'D:\\Python\\workspace\\Test_MDB\\kaders.mdb' oApp = Dispatch("Access.Application") oApp.Visi
formNames = []
strDbName = 'D:\\Python\\workspace\\Test_MDB\\kaders.mdb'
oApp = Dispatch("Access.Application")
oApp.Visible = True
win32api.keybd_event(0x10, 0x10, 0, 0)
oApp.OpenCurrentDatabase(strDbName)
win32api.keybd_event(0x10, 0x10, 2, 0)
print("Program start .....")
for form in oApp.CurrentProject.AllForms:
formName = form.name # get form name and open
oApp.DoCmd.OpenForm(formName, 1) # acDesign = 1
frm = oApp.Forms(formName) # point to form
print (frm.width)
print (frm.section(0).height)
最后一行与
打印(第一节(0)高度)
文件“>”,第2行,第节
pywintypes.com_错误:(-2147352573,'找不到成员',无,无)
有什么想法吗?谢谢,
Walter要获取表单高度的部分,只需引用表单的命名部分,而不需要数字索引:Detail、FormHeader、PageHeader 此外,我还对代码进行了一些调整,以转换print语句中表单的维度,并将循环包装在
try/except
(与VBA的On Error
句柄相对应)中,因为您希望始终在脚本运行后从内存中取消初始化com对象,而不考虑错误
import win32api
import win32com.client
strDbName = 'D:\\Python\\workspace\\Test_MDB\\kaders.mdb'
oApp = win32com.client.Dispatch("Access.Application")
oApp.Visible = True
win32api.keybd_event(0x10, 0x10, 0, 0)
oApp.OpenCurrentDatabase(strDbName)
win32api.keybd_event(0x10, 0x10, 2, 0)
print("Program start .....")
try:
for form in oApp.CurrentProject.AllForms:
formName = form.name # get form name and open
oApp.DoCmd.OpenForm(formName, 1) # acDesign = 1
frm = oApp.Forms(formName) # point to form
print (form.name)
print ((frm.width)/1440) # convert twips to inchdes (1440 twips = 1 inch)
print ((frm.Detail.height/1440)) # convert twips to inchdes (1440 twips = 1 inch)
print ("-----------------------")
oApp.DoCmd.Close(2, formName) # closing form to remove instance (in case of subforms)
except Exception as e :
print (e)
oApp.DoCmd.CloseDatabase # closing database to release from memory
oApp = None # uninitializing com object
尝试使用等效的
Detail0
,或使用方括号[0]
。通常,命名对象后的括号表示Python中的函数。感谢您的回复,但在[0]节给出错误“print(frm.section[0].height)TypeError:'method'object not subscribptable”和Detail0返回错误“raise AttributeError”(%s.%s“%(self.\u username\uu,attr))AttributeError:.Detail0“您使用的节名是对的,只是我正在尝试将大量表单读取/转换为HTML+CSS,我不能确定创建者是否更改了节的默认名称或使用了其他语言。其他访问语言给出了其他名称,因为我的是荷兰语,所以“FormHeader”变成了“Formulierkoptekst”。手动检查不是选项您是否测试代码?访问取决于当前用户的区域语言设置。因此,无论您使用何种语言,请相应地修改代码。如果试图在不同的语言机器上运行Python脚本,则使用If
有条件地调用height行。请在你这边测试英语版和荷兰语版。进行测试时,使用了英语版的“北风”和荷兰语测试表。。标题名称如所述。。我是如何发现的:-)另外,如果有人使用自己的名称来表示某个部分,例如“my_top_line”,我在检索该部分时也会遇到同样的问题。同时,我有一个解决方法,在一个部分中找到任何控件的最低点,使用控件中的部分编号,并将其作为高度,添加一些我不理解的底部填充。Access窗体的属性中只有五个,它们都不是用户定义的:Detail、FormHeader、FormFooter、PageHeader、PageFooter。有9份报告。该脚本在所有表单的循环中打开特定表单,并检索该特定表单的宽度和详细高度。什么都不叫名字。