Todo: 集成多平台 解决因SaiNiu线程抢占资源问题 本地提交测试环境打包 和 正式打包脚本与正式环境打包bat 提交Python32环境包 改进多日志文件生成情况修改打包日志细节
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
# Test MSOffice
|
||||
#
|
||||
# Main purpose of test is to ensure that Dynamic COM objects
|
||||
# work as expected.
|
||||
|
||||
# Assumes Word and Excel installed on your machine.
|
||||
|
||||
import traceback
|
||||
|
||||
import pythoncom
|
||||
import win32api
|
||||
import win32com
|
||||
import win32com.client.dynamic
|
||||
from win32com.client import gencache
|
||||
from win32com.test.util import CheckClean
|
||||
|
||||
|
||||
# Test a few of the MSOffice components.
|
||||
def TestWord():
|
||||
try:
|
||||
# Office 97 - _totally_ different object model!
|
||||
word7 = win32com.client.Dispatch("Word.Basic")
|
||||
# Check if any property needed by TestWord7 is not None
|
||||
if word7.FileNew:
|
||||
print("Starting Word 7 for dynamic test")
|
||||
TestWord7(word7)
|
||||
else:
|
||||
# NOTE - using "client.Dispatch" would return an msword8.py instance!
|
||||
print("Starting Word 8 for dynamic test")
|
||||
word = win32com.client.dynamic.Dispatch("Word.Application")
|
||||
TestWord8(word)
|
||||
|
||||
word = None
|
||||
# Now we will test Dispatch without the new "lazy" capabilities
|
||||
print("Starting Word 8 for non-lazy dynamic test")
|
||||
dispatch = win32com.client.dynamic._GetGoodDispatch("Word.Application")
|
||||
typeinfo = dispatch.GetTypeInfo()
|
||||
attr = typeinfo.GetTypeAttr()
|
||||
olerepr = win32com.client.build.DispatchItem(typeinfo, attr, None, 0)
|
||||
word = win32com.client.dynamic.CDispatch(dispatch, olerepr)
|
||||
dispatch = typeinfo = attr = olerepr = None
|
||||
TestWord8(word)
|
||||
except Exception as e:
|
||||
print("Word dynamic tests failed", e)
|
||||
traceback.print_exc()
|
||||
|
||||
print("Starting MSWord for generated test")
|
||||
try:
|
||||
from win32com.client import gencache
|
||||
|
||||
word = gencache.EnsureDispatch("Word.Application.8")
|
||||
TestWord8(word)
|
||||
except Exception as e:
|
||||
print("Word generated tests failed", e)
|
||||
traceback.print_exc()
|
||||
|
||||
|
||||
def TestWord7(word):
|
||||
word.FileNew()
|
||||
# If not shown, show the app.
|
||||
if not word.AppShow():
|
||||
word._proc_("AppShow")
|
||||
|
||||
for i in range(12):
|
||||
word.FormatFont(Color=i + 1, Points=i + 12)
|
||||
word.Insert("Hello from Python %d\n" % i)
|
||||
|
||||
word.FileClose(2)
|
||||
|
||||
|
||||
def TestWord8(word):
|
||||
word.Visible = 1
|
||||
doc = word.Documents.Add()
|
||||
wrange = doc.Range()
|
||||
for i in range(10):
|
||||
wrange.InsertAfter(f"Hello from Python {i + 1}\n")
|
||||
paras = doc.Paragraphs
|
||||
if int(word.Version.split(".")[0]) >= 16:
|
||||
# With Word 16 / Word 2019
|
||||
for i, p in enumerate(paras):
|
||||
p.Range.Font.ColorIndex = i + 1
|
||||
p.Range.Font.Size = 12 + (4 * i)
|
||||
else:
|
||||
# NOTE: Iterating on paras doesn't seem to work - no error, just doesn't work
|
||||
# for para in paras:
|
||||
# para().Font...
|
||||
for i in range(len(paras)):
|
||||
p = paras(i + 1)
|
||||
p.Font.ColorIndex = i + 1
|
||||
p.Font.Size = 12 + (4 * i)
|
||||
doc.Close(SaveChanges=False)
|
||||
word.Quit()
|
||||
win32api.Sleep(1000) # Wait for word to close, else we may get OA error.
|
||||
|
||||
|
||||
def TestWord8OldStyle():
|
||||
try:
|
||||
import win32com.test.Generated4Test.msword8
|
||||
except ImportError:
|
||||
print("Can not do old style test")
|
||||
|
||||
|
||||
def TextExcel(xl):
|
||||
xl.Visible = 0
|
||||
assert not xl.Visible, "Visible property is true."
|
||||
xl.Visible = 1
|
||||
assert xl.Visible, "Visible property not true."
|
||||
|
||||
xl.Workbooks.Add()
|
||||
|
||||
xl.Range("A1:C1").Value = (1, 2, 3)
|
||||
xl.Range("A2:C2").Value = ("x", "y", "z")
|
||||
xl.Range("A3:C3").Value = ("3", "2", "1")
|
||||
|
||||
for i in range(20):
|
||||
xl.Cells(i + 1, i + 1).Value = "Hi %d" % i
|
||||
|
||||
assert xl.Range("A1").Value == "Hi 0", "Single cell range failed"
|
||||
assert xl.Range("A1:B1").Value == (
|
||||
("Hi 0", 2),
|
||||
), "flat-horizontal cell range failed"
|
||||
assert xl.Range("A1:A2").Value == (
|
||||
("Hi 0",),
|
||||
("x",),
|
||||
), "flat-vertical cell range failed"
|
||||
assert xl.Range("A1:C3").Value == (
|
||||
("Hi 0", 2, 3),
|
||||
("x", "Hi 1", "z"),
|
||||
(3, 2, "Hi 2"),
|
||||
), "square cell range failed"
|
||||
|
||||
xl.Range("A1:C3").Value = ((3, 2, 1), ("x", "y", "z"), (1, 2, 3))
|
||||
|
||||
assert xl.Range("A1:C3").Value == (
|
||||
(3, 2, 1),
|
||||
("x", "y", "z"),
|
||||
(1, 2, 3),
|
||||
), "Range was not what I set it to!"
|
||||
|
||||
# test dates out with Excel
|
||||
xl.Cells(5, 1).Value = "Excel time"
|
||||
xl.Cells(5, 2).Formula = "=Now()"
|
||||
|
||||
import time
|
||||
|
||||
xl.Cells(6, 1).Value = "Python time"
|
||||
xl.Cells(6, 2).Value = pythoncom.MakeTime(time.time())
|
||||
xl.Cells(6, 2).NumberFormat = "d/mm/yy h:mm"
|
||||
xl.Columns("A:B").EntireColumn.AutoFit()
|
||||
|
||||
xl.Workbooks(1).Close(0)
|
||||
xl.Quit()
|
||||
|
||||
|
||||
def TestAll():
|
||||
TestWord()
|
||||
|
||||
try:
|
||||
print("Starting Excel for Dynamic test...")
|
||||
xl = win32com.client.dynamic.Dispatch("Excel.Application")
|
||||
TextExcel(xl)
|
||||
except Exception as e:
|
||||
worked = False
|
||||
print("Excel tests failed", e)
|
||||
traceback.print_exc()
|
||||
|
||||
try:
|
||||
print("Starting Excel 8 for generated excel8.py test...")
|
||||
mod = gencache.EnsureModule(
|
||||
"{00020813-0000-0000-C000-000000000046}", 0, 1, 2, bForDemand=True
|
||||
)
|
||||
xl = win32com.client.Dispatch("Excel.Application")
|
||||
TextExcel(xl)
|
||||
except ImportError:
|
||||
print("Could not import the generated Excel 97 wrapper")
|
||||
except Exception as e:
|
||||
print("Generated Excel tests failed", e)
|
||||
traceback.print_exc()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
TestAll()
|
||||
CheckClean()
|
||||
pythoncom.CoUninitialize()
|
||||
Reference in New Issue
Block a user