我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Delphi中使用python脚本读取E

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Delphi中使用python脚本读取E

前段时间,在正式项目中使用Python来读取Excel表格的数据。具体需求是,项目数据库中有些数据需要根据Excel表格里面的数据进行一些调整,功能应该比较简单。为了学习Python,决定使用Delphi+Python来实现。Delphi中是使用PythonForDelphi控件来加入Python引擎的。实现整个功能用了大半天时间。
delphi项目方面,需要先修改数据表的封装类,使它能在Python中出现并使用,简单操作数据表。改了几个地方:
  1. 学控件中的Delphi modules工程,在项目中引入Python引擎,加入一个Delphi模块。
  2. 将表操作基类改成从TComponent中继承过来@_@,目的是为了能在py脚本中直接使用published的属性;新实现一个该基类的包装类,继承自WrapDelphiClasses.TPyDelphiComponent,并注册到Delphi模块中。
  3. 新加个菜单,调用外部的PY脚本。贪简单,只在该功能的地方加这些代码,在调用脚本前,注册了具体的表封装对象。
Python方面,有两个自己写的脚本,其中一个是使用win32com封装Excel操作的pyExcel.py,简陋的代码,够用就行。另一个是实现具体的功能的脚本,代码入下:
import time
from pyExcel import PYExcel
import types
from Delphi import *
lDEHs = {}
CR = chr(10)# + chr(13)
CRCR = CR + CR
def AddSpace(aStr):
    CR_R = chr(10)
    SPACESTR = '            '
    return aStr.replace(CR_R, CR_R+SPACESTR)
    pass
def setDEFZ(uKW):
    deb.Edit()
    s1 = deb.DEFZ
    uGZNR = AddSpace(s1.decode('gbk'))
    uGZNR = u'【工作内容】%s' %(uGZNR)
   
    uDEFZ = u'%s%s【附注说明】%s【勘误记录】%s%s' \
        %(uGZNR, CRCR, CRCR, uKW, CRCR)
    deb.DEFZ = uDEFZ.encode('gbk')
    deb.Post()
    pass
def setDEFZByXls():
    global CR, lDEHs
    col_DEH = 'A'
    col_KW = 'B'
    iRow = 0
    iEmpty = 0
    xl1 = PYExcel()
    if xl1.FindBook('Sheet1'):
        while (iEmpty<10):
         iRow += 1
         try:
             sDEH = str(xl1.getRangeValue(col_DEH + str(iRow)))
             pass
         except:
             sDEH = None
             pass
         if not sDEH or (sDEH=='') or (sDEH=='None'):
            iEmpty += 1
         elif deb.Locate('DEH', sDEH):
             lDEHs.setdefault(sDEH, sDEH)
             s2 = AddSpace(xl1.getRangeValue(col_KW + str(iRow)))
             setDEFZ(s2)
def setOthers():
    global lDEHs
   
    deb.First()
    while not deb.Eof():
        if not lDEHs.has_key(deb.deh):
            lDEHs.setdefault(deb.deh, deb.deh)
            try:
                setDEFZ(u'')
            except:
                pass
           
        deb.Next()
setDEFZByXls()
setOthers()
在编写调试这个脚本用了大半的时间,其中碰到些问题:
  1. 编码问题。好在前段时间刚理解Unicode的含义,现在在实际中解决了这个问题。Delphi中的String保存的中文信息,通常都是使用系统的默认字符集来编码的。从Delphi中取出String如:s1 = deb.DEFZ,s1这时的编码是系统默认字符集(gbk)。在py脚本中使用代码:s1.decode('gbk')进行解码,得到Unicode字符串。保存回Delphi中时,再将Unicode使用gbk编码:deb.DEFZ = uDEFZ.encode('gbk')。
  2. PythonforDelphi控件,使用Delphi的Rtti技术,py脚本中能直接使用部分published的属性,简化了许多工作量。不过published的方法、过程和数组属性还是不能直接使用,需要在对应的封装类中自己包装。
  3. 使用PyScripter工具编写该脚本,很方便。不过当前好象还没有什么好的方法来调试以这种运行方式运行的脚本。现在PyScripter支持远程调试功能,以后有空要想办法解决这个问题。
 
 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Delphi中使用python脚本读取E

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Delphi中使用python脚本读取E

前段时间,在正式项目中使用Python来读取Excel表格的数据。具体需求是,项目数据库中有些数据需要根据Excel表格里面的数据进行一些调整,功能应该比较简单。为了学习Python,决定使用Delphi+Python来实现。Delphi中
2023-01-31

Python实用脚本(1):读取Prop

JAVA本身提供了对于Properties文件操作的类,项目中的很多配置信息都是放在了Properties文件。但是Python并没有提供操作Properties文件的库,所以,自己动手写个一个可以加载Properties文件的脚本。cla
2023-01-31

使用Python脚本获取CPU温度

不同的linux发行版可能获取CPU温度文件的目录不所不同,可自行百度。# fedora filepath :'/sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp2_input'# respbe
2023-01-31

用于读取不同消息模式的 Python 脚本

问题内容我正在尝试制作一个灵活的python脚本,从synop代码中读取和提取一些天气变量。这是代码:import redef extract_data_12_utc(message):# pattern messagepattern
用于读取不同消息模式的 Python 脚本
2024-02-11

使用Shell脚本怎么从文件中逐行读取内容

使用Shell脚本怎么从文件中逐行读取内容?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.使用for循环从文件中逐行读取内容:在默认情况现下此方法是逐个单词的读取文件内容
2023-06-09

如何使用Shell脚本循环读取文件中每一行内容

这篇文章主要介绍了如何使用Shell脚本循环读取文件中每一行内容,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言本文主要给大家介绍了关于使用Shell脚本循环读取文件每一行
2023-06-09

【脚本】python中wmi介绍和使用

一:WMI基础知识===================================================================WMI 最初于1998年作为一个附加组件与 Windows NT 4.0 Service
2023-01-31

C#中怎么使用IronPython库调用Python脚本

在C#中使用IronPython库调用Python脚本的步骤如下:首先,需要将IronPython库添加到C#项目中。可以通过NuGet包管理器搜索IronPython,并将其添加到项目中。创建一个Python脚本文件,编写需要调用的Pyt
C#中怎么使用IronPython库调用Python脚本
2024-03-08

如何在Python中使用pandas读取数据

今天就跟大家聊聊有关如何在Python中使用pandas读取数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、三种数据文件的读取二、csv、tsv、txt 文件读取1)CSV文件
2023-06-15

python中怎么使用 svn脚本删除文件

这篇文章将为大家详细讲解有关python中怎么使用 svn脚本删除文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python svn脚本需要我们不断的学习,在学习的过程中我们会遇到不少的
2023-06-17

利用Shell脚本循环读取文件中每一行的方法详解

前言 本文主要给大家介绍了关于使用Shell脚本循环读取文件每一行的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 一、使用for循环for line in `cat filename` doecho $line
2022-06-04

Python中怎么使用pdfplumber读取PDF写入Excel

本篇内容介绍了“Python中怎么使用pdfplumber读取PDF写入Excel”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Pyth
2023-07-02

怎么在Linux中使用Shell脚本获取终端宽度

这篇文章给大家介绍怎么在Linux中使用Shell脚本获取终端宽度,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。获取终端大小时候的学习在写shell脚本时想输出一行占满整个终端屏幕宽度的 横杠 发现for循环会导致执行
2023-06-09

使用Python怎么读取文件名中的数字

这期内容当中小编将会给大家带来有关使用Python怎么读取文件名中的数字,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录