PowerBuilder使用python程序导入excel文件

应用场景:

PB主要应用于数据库管理系统,经常需要数据的导入导出的操作,而PB提供的importfile函数,仅支持Text! 、CSV!、XML!、DBase2!、DBase3!的文格式。没错,不支持excel文件。当然可以通过DDE,OLE等方法对excel进行操作,不过确实不够友好。

本文介绍python编写一个“excel文件另存为带制表符的txt的小程序’,并在PB中调用它。

源码下载:https://download.csdn.net/download/wosind/11008960


一、python程序的编写,这里用的是xlrd包读取excel文件

from xlrd import open_workbook
import win32gui
import win32api

workbook = open_workbook('test.xlsx')
i = 0

# 获取sheet名称列表
worksheets = workbook.sheet_names()

# 获取表格数据,这里只取第一个sheet的数据,需要多个sheet,可以进行拓展
worksheet = workbook.sheet_by_name(worksheets[0])

# 给数据添加制表符和换行
info = ''
for rownum in range(worksheet.nrows):
    for x in worksheet.row_values(rownum):
        info += str(x) + '\t'
    info += '\n'
print(info)

# 写入txt文本
txtfile = open('test.txt', 'w')
txtfile.write(info)
txtfile.close()

# 读取系统窗口列表信息
# 按窗口名称获取窗口句柄
# 给PB开发的应用窗口发送一个参数1,通知执行结束
hWndList = []
win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hWndList)
for hwnd in hWndList:
    clsname = win32gui.GetClassName(hwnd)
    title = win32gui.GetWindowText(hwnd)
    if (title.find('PB开发助手') >= 0):
        win32api.SendMessage(hwnd, 1600, 2, 1)

二、使用pyinstaller、py2exe之类的工具,将python程序打包成exe程序。操作比较简单,这里就不介绍了。

*网上有很多例子是使用pandas处理的excel,起初也用这个方式做了,结果打包的时候发现体积太大(近60MB),改用xlsd大概6M左右。

三、PB应用在相应的窗口中,使用run()来调用前面做好的exe程序,然后添加自定义事件:pbm_other,响应Python程序发送的程序结束消息。例子用的API函数接收

function long GlobalGetAtomName(long ATOM,ref string lpBuffer,integer nSize) Library "kernel32.dll" Alias for "GlobalGetAtomNameA"
function long GlobalDeleteAtom(long ATOM) Library "kernel32.dll"

*Python做的程序如果需要运行参数,比如指定excel文件名称,那可以使用sys库来接收参数。例如:

from xlrd import open_workbook
import win32gui
import win32api
import sys

def exceltotxt(excel_dir, txt_dir):

    workbook = open_workbook(excel_dir)
    i = 0

    # 获取sheet名称列表
    worksheets = workbook.sheet_names()

    # 获取表格数据,这里只取第一个sheet的数据,需要多个sheet,可以进行拓展
    worksheet = workbook.sheet_by_name(worksheets[0])

    # 给数据添加制表符和换行
    info = ''
    for rownum in range(worksheet.nrows):
        for x in worksheet.row_values(rownum):
            info += str(x) + '\t'
        info += '\n'
    print(info)

    # 写入txt文本
    txtfile = open(txt_dir, 'w')
    txtfile.write(info)
    txtfile.close()

    # 读取系统窗口列表信息
    # 按窗口名称获取窗口句柄
    # 给PB开发的应用窗口发送一个参数1,通知执行结束

    hWndList = []
    win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hWndList)
    for hwnd in hWndList:
        clsname = win32gui.GetClassName(hwnd)
        title = win32gui.GetWindowText(hwnd)
        if (title.find('PB开发助手') >= 0):
            win32api.SendMessage(hwnd, 1600, 2, 1)

exceltotxt(sys.argv[1], sys.argv[2])

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值