wps vba 通过代码 绘制vba能实现自动做图表吗,手动F8 逐句执行,正常 ,直接执行 vba能实现自动做图表吗无曲线,怎么回事?

文科出身,在excel上算是一路摸爬滚打。现在带着3个人的团队,组建了信息部,主要负责公司的营运数据分析。分享一些我的经验。用excel做数据分析,不难,难在如何做好。拆分成两块:掌握excel分析技能+数据分析的硬核经验。一、快速掌握excel分析技能1、excel学习excel教程不要太多,如何快速学习excel,我之前也回答过,反正就是逮住一本教程,照着练: 把一本体系化的excel教程吃透了,就足以应对业务工作所需的数据分析了。如果觉得书籍太枯燥,那把视频课看起来。对数据分析有帮助的一些还不错的视频课,我梳理了一下:在有了Excel的基础上,可以再去适当学习一些数据分析的基础课程,二者在很多地方都是相通的,注意:不要一开始就去啃那种很难的数据分析课程,否则很容易放弃。如果不知道怎么选择,可以去看看知乎知学堂官方的数据分析课程,对比下来这个课程对于数据分析的底层逻辑盘的是最清楚的,作为入门课程完全足够了。2、excel实操好用的函数能让你数据分析时,如有神助,下面是我在数据分析时常用的函数:常用函数(加总求和、计数、平均、最值、排序、乘积、除余、取整)逻辑运算(if、iferror、and、or)文本编辑(文本提取、文本查找、文本替换、文本转换及合并)引用与查找(vlookup、hlookup、lookup、indirect、index、match)1)排序函数
rank(排序的目标数值,区域,逻辑值)逻辑值如果输入0或者不输入时,为降序排列(数值越大,排名越靠前);逻辑值输入非0时,为升序排列(数值越大,排名越靠后)比如:对业绩排名的计算,小李排名第5 2)逻辑判断if(计算条件的表达式或值,满足条件返回true,否则返回false)根据指定条件来判断其“满足”(TRUE)、“不满足”(FALSE),从而返回相应的内容。比如:判断团队业绩是否达标,小李和小军均不合格 3)计算文本长度len(要计算字符长度的文本),用来计算文本串的字符数比如:判断手机号是否有效,小李手机号少一位,为无效信息 不全部列举了,这篇讲的比较全,可以参考:<Excel> 数据分析excel常用函数数据处理上,可以使用一些excel插件,提高处理速度:1)慧办公 :适用版本:Office2003/2007/2010/2013/2016/365等、WPS013/2016等2)Excel易用宝-V2018 :Excel Home出品,适用版本:Excel 2007/2010/2013/2016和Office 365 3)方方格子 :除了常见的Excel工具箱外,在公式/审计/财务/图片/邮件等领域还有一些付费插件。适用版本:Excel 2007~2016 4)Excel必备工具箱
:适用版本: EXCEL2007/2010/2013/2016 5)Excel精灵-8.0版 :Excel精灵7.2网络版的功能比较全,但有捆绑软件。适用版本:Excel 2007、2010、2013和2016 6)Easycharts :图表制作插件注:插件方便也不用贪多,挑顺手的数据处理和图形制作的各一个即可。缺实操的伙伴,可以从199it上找点数据练练手。常见的公开数据网站都可以搜索到:或者进一些综合类的商业数据网站:镝数聚,除了研究报告,还可以找到很多当下最新的热点数据。另外,好的图表可视化是一份分析报告的点睛之笔。平时要多看美图、多参考:关于如何制作干净漂亮的excel表格,在这篇回答有我的一些经验:二、数据分析的几点硬核经验1、务必提升数据采集的效率因为读了四年社会学(社会调查专业户),经常需要大面积采集数据,所以吃够了数据收集的亏。excel重处理而弱采集,尤其在大体量的公司,跨部门收集、汇总四面八方的数据,很崩溃。所以我从去年5月找了一些表单工具(j简道云、麦客、金数据、氚云等),一圈试下来,碰上年初的疫情我们公司上了钉钉,现在是【钉钉+简道云】搭配使用,数据收集效率还是很可观地,目前在库存管理、销售管理上都已形成了规范的数据采集管理: 关于实际使用的心得,我就不展开讲了,以后再作分享。 数据采集还涉及线上数据爬取,但这方面我了解不多,就不班门弄斧了。有意者可以参考这篇回答:2、业务知识大于工具选择所有数据分析师都会告诉后来人“业务知识很重要”,因为大家在踩了坑之后才恍然大悟分析中遇到的很多难题问题都源于对业务的不了解。例如,同样是对客户进行分析,互联网电商的客户与保险客户具有明显区别,前者重视来源,活跃度,购买率,流失率,后者关注渠道,报价,理赔风险,投诉。业务知识包括这种大方向的行业知识,也包括公司内部特殊情况,了解得越详细可以避免绕很多弯路。例如,有些行为是内部人员参与的造成的数据异常要提前做处理,有些业务开展是带地区特性的,分析时候要区分对待等。而真正做分析时候,你会发现市面上有太多的分析工具,需要掌握的实在是太多了,其实不必纠结于此,依据个人能力,配合当前的数据分析环境,适用的工具自然会被选出。数据分析过来人都会说80%的时间都在做数据处理工作,所以数据处理能力是必须的,简单工具有Excel、SQL,复杂的有R,Python,Java。专业点的是fineBI、tableau等。3、规范良好的数据思维分享几本在我成长过程中帮助较大的【数据分析书籍】1、《深入浅出数据分析》数据分析入门第一本。通俗简单,能够让你对数据分析的相关概念有大致的了解。这本书蕴含的思想逻辑和分析原则,要好好体会,会对你以后的学习有很大的帮助。2、《深入浅出统计学》号称“文科生也能看懂”的统计书。阅读起来相当容易,一口气就能看完。这本书所讲的知识在数据分析中都是常见且必须掌握的,比如基本的统计量,基本上每个分析项目中都会用到;比如基本的概率分布,总体与样本的概念、置信区间、假设检验、回归分析,都是关于数据分析的统计学知识。“HeadFirst类的书籍,一向浅显易懂形象生动,可以对分析概念有个全面的认知。”3、《精益数据分析》“此书优势在于将企业分成了几个大的行业类别,并分门别类的讲解了每个行业的商业模式特点及分析技巧,对使用者的分析能力要求较高,且必须具备相应的业务知识。”书中并没有讲到具体的数据分析技术,主要分析了各种产品中用到的指标、模型和“数据驱动型产品”的一些思路。4、《决战大数据》阿里巴巴前数据副总裁车品觉所著,讲解了阿里巴巴在企业内部治理数据过程中的心得,所讲“存-通-用”数据管理三板斧和“从数据化运营到运营数据”,字字珠玑,可堪借鉴。以上这四本都是最基础的,必看书籍,另外还有比如《R语言实战》、《利用Python进行数据分析》等5本进阶书籍,我整理了一个图片,有需要可以自己去搜。用ex cel做数据分析,不难,难在如何做好。拆分成两块:掌握excel分析技能+数据分析的硬核经验。}
(在做投行、行研、咨询等金融岗位,有没有什么好用的找数据技巧呢? - 何明科的回答中重点讲了如何利用爬虫来收集数据和做出炫酷的表格,这篇主要讲讲如果用程序来替代人工,一个顶俩:虽然不如AlphaGo,但也是机器替代人类的一个小侧面)(在专栏文章中粉丝回馈:程序让你更性感 - 数据冰山 - 知乎专栏,提供学习VBA的实战技巧。)许多高级程序员瞧不上VBA。因为程序员是有鄙视链的:汇编 >C >C++ >Python >Java及C#及PHP(这三者相互撕) >VB >HTML。在这长长的鄙视链中,甚至都没有VBA的位置。可是,Excel+VBA是图灵完备的(谢谢 @Octolet 的精辟总结),所以被程序员用来耍酷的各类性感语言能实现的大部分功能,Excel+VBA都能实现,而且往往是以更高效更快捷的方式,在这里不谈效率和优雅。而且考虑到大部分普通群众是没有编程环境的(各种依赖各种包,各种OS各种编译环境,还有IDE),然而使用VBA,只需要打开装机自带的Office,然后按下Alt+F11就自动进入编程和执行环境;甚至可以更简单的通过录制宏来解决写程序的问题,只需要在简单的代码基础上修修补补就可以执行。再考虑到VBA和Office各软件的完美整合,所以在便捷性方面,VBA是无可比拟的。最后,Office+VBA的分享性和移植性很强,任何测试通过的程序放到别的机器上也可轻易执行;而其他程序,哪怕是一段最简单的“Hello World”,也不一定。因此本文讨论各种通过Excel+VBA能实现的各种炫酷功能(也会拓展到Office+VBA),主要是为Professional Service以及各行各业不写程序但是又严重依赖于Office的职场人士服务的。曾经有一个朋友和我说,“Excel根本不需要编程,像我这样的Excel大牛靠函数和自定义函数能解决所有的问题。”对于这样的评论,我想起自己小学时的一段经历。因为不能理解虚数i(i^2 = -1)的价值,问我爸i有卵用?我爸说,“等你长大了,遇到更多的问题,就知道i的价值。”1、自动打印刚进职场的新人,只要爸爸不是李刚,基本都做过影帝影后(影=印,各种复印打印的体力劳动)。特别是咨询投行服务行业,在某次给客户的大汇报或者大忽悠会议之前,花数小时或者整晚来打印数个文件,并不是天方夜谭。而且这件事情是对着同样一堆不断修改的文件,会经常不断重复发生。我加入BCG的第一个项目,就是帮助某大型企业从上到下设计KPI体系并实施。从上到下涉及到几十个部门,大概有100多张的KPI表格需要完成,这些KPI表格分布在各个Excel文件里。我们4个咨询顾问的任务:设定好KPI的基本格式,然后每个顾问负责几个部门,在Excel里不断修改KPI表格,打印出来后去各个当事人及其领导那里讨论并修改每周把所有的Excel文件中的KPI表格归集在一起,按顺序分部门打印出来,并需要多份,找负责该项目的HR头儿汇报进度和情况这里面有个费时费力的环节,每周需要在多个Excel文件中找出目标Worksheet,然后选定合适的区域作为输出的表格,按照一定的格式和一定的顺序,打印出这100多张表格。之前我们全是凭借人力,每周由一个Analyst把所有最新的Excel文件收集在一起,然后挨个打开文件选中合适的Worksheet,选中区域设置好格式进行打印。每进行一次,几乎耗费一两个小时,还不能保证不出错。于是写下了我的第一个VBA程序,而且基本上是宏录制之后来改的,没有使用参考书及搜索引擎,全靠F1和自动提示,所以贴出来特别纪念一下。实现的功能就是将上述的人肉实现的功能全部自动化。按下一个妞,就慢慢等着打印机按顺序出结果吧。后来这个程序的升级版是:调度多台打印机,进一步提高效率,以及将打印机卡纸造成队列错误的概率降到极小的范围内。2、制作图表及GIF动画图表制作是每个Office一族的必备任务,制得一手好表格,绝对是升职加薪和偷懒放风的利器。在回答(黄焖鸡米饭是怎么火起来的? - 何明科的回答),就利用Excel+VBA做出数张炫酷的信息地图,利用VBA为每个省的图形涂色。(涂色部分来自于网上的一段程序,制作GIF动画的是自己完成的)同时,为了进一步增强炫酷结果,还利用VBA将这些连续变化的图表做成了GIF动画,可惜知乎不支持GIF的显示。3、制作复杂的分析图表下图是研究各个车型之间的用户相互转换关系,因为要将一维的转化率向量,变成两维的矩阵,所以使用了如下的复杂公式。=IF(ISERROR(OFFSET($C$2,MATCH(CONCATENATE(ROW(A4),"-",COLUMN(A4)),$D$3:$D$600,FALSE),0)/OFFSET($C$2,MATCH(CONCATENATE(ROW(A4),"-",ROW(A4)),$D$3:$D$600,FALSE),0)),"",OFFSET($C$2,MATCH(CONCATENATE(ROW(A4),"-",COLUMN(A4)),$D$3:$D$600,FALSE),0)/OFFSET($C$2,MATCH(CONCATENATE(ROW(A4),"-",ROW(A4)),$D$3:$D$600,FALSE),0))
同时为了用颜色的深浅来表示转化率的大小关系而便于比较,使用了VBA对下面的矩阵进行着色。当然有人肯定会说可以使用条件化格式,但是使用VBA保持了最高灵活度和效率。4、根据格式化信息,生成标准的word文件这是帮朋友实现的一个项目,他们实验室是研究某类事故并对重大事故进行鉴定,最后发布word版的正式报告。之前的工作流程是在专业的软件中完成计算和仿真,最后按照正式报告八股文的行文,把各种关键信息填进去,最后写成word文件。写报告的过程枯燥而没有技术含量,但却要反复进行。通过下图的Word+VBA,完成主要的交互界面并连接计算软件。在通过简单的交互获取主要信息后,在后台完成计算并将主要信息填写入八股文的word模版,最终完成报告,同时将结构化的信息存入Access数据库。希望有机会和 @Raymond Wang 和 @金有元 等大律师合作,将Termsheet的书写及Termsheet到SPA及M&A等的法律文件书写工作彻底自动化。5、通过Excel管理分布的任务流,并将Excel表格输出到Powerpoint这是协助某国际大型汽车制造厂完成新品牌及其新款车型上市,面临车型即将断档的窘境,该新车型的上市非常关键,不能错失时间节点。然而,新车型上市涉及到无数分支:制造、产品、市场、渠道、营销、公关、财务等等,同时还要协调欧洲的两个总部以及中国的两个分部。这次咨询的核心任务就是项目管理,总控整个大项目的进度,并每周向中国区的CEO汇报进度并发掘出易出现问题的关键节点以调配资源。我们4个咨询顾问分配下去各自负责几个部门或者项目分支,和团队一起规划流程、画甘特图、确认里程碑及时间点、安排负责人等等。当每天回到办公室大家将进度汇总在一起的时候发现了挑战及难点,每条任务线并不是独立发展的,而是各条任务线交织在一起并互相影响。某些核心人员在多个任务线出现。比如:负责预算的财务人员,几乎要出现在各条线中负责相关预算的审批环节某些任务线的里程碑是其他任务线里程碑的必要条件而相互关联。比如:新车的下线时间影响发布会的时间,相关法规测试的通过又影响车辆的下线时间等等当任务线增多以及任务线之间的交叉越发频繁的时候,汇总的任务将会几何级数增加,这就是我们在项目过程中遇到的问题。于是我利用Excel+VBA完成了这个工作的自动化。主要实现的功能:自动将4个顾问手中分散的Excel文件汇集在一起形成一个大的总表,如下图各顾问手中的表格是按照部门维度来划分的,汇总后需要按照不同的维度来输出不同类型的表格,比如:按任务线输出表格、按责任人输出表格、所有延误任务的表格、所有需要资源重点投入任务的表格等等在此基础之上,还要将上面提到的各种维度下的所有表格(大概有200多张),按要求格式粘贴到PPT中,每周提交给中国区的总部进行汇报和评估。密密麻麻的表格如下图。于是,我又写了一个程序将Excel中的表格输出到Powerpoint中,将一个秘书每次需要数小时才能完成的工作,简化成了一键发布,并可以在Excel中完成对PPT的更新。这个项目的程序量不小,近似于写了一个迷你版的Microsoft Project来进行项目管理。最后,下图中密密麻麻的PPT每周需要更新一次,每次都是快100张的工作量,然而基本上都是靠Excel来自动完成更新的。因为PPT的模版每次变化不大,我将这些模版记录下来,每周更新的时候只要根据Excel中最新的数据更改PPT中的数据即可。6、根据结果倒推假设一般的Financial Model都是根据重重假设计算最终结果。而在为某顶级手机品牌服务的过程中,我们却遭遇了逆向的尴尬。本来是根据地面销售人员的一定服务水平,计算所需要的销售人员数量;结果在项目过程中,总部已经确定好了销售人数的Head Count,转而要求我们根据HC确定服务水平。然而,服务水平不是一个单变量,是由零售店的覆盖率、销售拜访频率、拜访中的服务深度等多重因素来决定的,同时还可以根据一线至无线城市来变化。于是只好再次祭出Excel+VBA法宝。先根据常规思路建立好Financial Model,得出HC的初步结果。然后写VBA程序,根据不同的情景、不同的优先级以及不同的权重来调节零售店的覆盖率、销售拜访频率、拜访中的服务深度等多因素,同时设定这几大因素的可接受范围,逐步逼近HC的预设值。如果没有程序,以前基本是靠人工手动调节来凑结果,而且因为各种情景的不同,还需要多次调节。而通过程序,基本是自动完成,还可智能得设置优先级及权重,无需人工参与。7、海量下载Bloomberg数据并完成分析通过Bloomberg的VBA API,海量下载数百只目标股票的tick data以及order book。并根据实现构建好的数学模型,在后台完成计算,将上述的实时数据转化成每只股票实时的trading cost,实时展现在交易员最常用的Excel界面中,方便交易员评估当下的交易成本以便于优化交易策略。8、结语计算了一下,我在BCG做了三年咨询顾问,大概写了几万行VBA程序(都是自己手工输入的,没有复制拷贝和系统自动生成),每个项目一千至几千行程序不等。最后将Excel用成了中控界面,类似EMACS,在Excel可以随意操控全公司的打印机、Word、Powerpoint等等,自动完成各种任务以及数据更新和抓取。因为Excel的数据更结构化,所以将其作为中控平台,比Word和Powerpoint更有优势。一些学习VBA的小技巧在这个回答里:Excel VBA 如何快速学习? - 何明科的回答。最后,这些程序中的一些公共模块,打包给了BCG Global IT,BCG给了我一个Sponsorship去Stanford GSB读书。程序的注释行里面有我几个好朋友、亲人及导师的名字,祝他们一生平安。最后的彩蛋,还可以用VBA来画油画,零基础成为用美术作品把妹撩汉的艺术青年(Excel 有什么奇技淫巧,让你相见恨晚? - 何明科的回答)。_________________________________更多精彩文章请看:数据冰山 - 知乎专栏}
之前写过一版《纯小白用 ChatGPT 轻松制作成语连线游戏》,但是随着openai的更新,原来的代码已经不在适用。所以我重新更新了一版。详细内容如下:一、初级版手把手教你用 chatgpt 实现编写一款成语连线小游戏。可以给自己孩子当语文教学工具哈哈。一)问 chatgpt“写一个 Python 程序,把 10 个成语和它们的解释分开,分别列表,打乱顺序,在 一张 A4 纸上分两列列出,形成一个连线题”它刷刷的给我们写出了代码,我们直接粘贴到 ide 里运行,我用的是 pycharm,但是执行代码提示编码错误,于是我开始修改 ide 的编码格式然后继续执行上述代码,嘿嘿,成了。这么简单我们怎么可以满足,于是我要添加一个功能,就是将答案写入 pdf 文件。二)继续问 chatpgpt其中{}中写的是上述代码:“我给你一段代码,代码我放在{}中,你帮我添加将答案写入 pdf 文件的功能”三)运行上述代码生成 pdf,但打开是乱码。于是我们继续问 gpt四)定义中文字体文件路径从它给我的回复看的出来需要定义中文字体文件路径 font_path = 'path_to_your_font_file.ttf' # 替换为正确的字体文件路径,继续问 gpt这么友好,告诉我们怎么去找这个字体了。按照上述代码运行我们打印出来了本机的字体信息非常多的字体信息,如果我们不知道选哪个,就继续问 gpt五)调试代码大功告成! 调试好的最终代码如下:import random
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts
import TTFont
# import matplotlib.font_manager as fm
# fonts = fm.findSystemFonts()
# for font in fonts:
#
print(font)
# 定义中文字体文件路径
font_path = 'C:/Windows/Fonts/simsun.ttc' #替换为正确的字体文件路径
# 注册字体
pdfmetrics.registerFont(TTFont('ChineseFont', font_path))
idioms = {
'井井有条': '形容事物井然有序。',
'一丝不苟': '形容做事认真,一点也不马虎。',
'大言不惭': '形容说大话而毫不害羞。',
'对牛弹琴': '比喻对不懂道理的人讲解道理。',
'画蛇添足': '比喻做了多余的事。',
'口是心非': '说的和心里想的不一样。',
'半途而废': '指事情进行到一半就停下来,不继续下去。',
'不可思议': '难以想象或解释。',
'沧海一粟': '比喻极微小的东西。',
'大公无私': '形容为公众利益而无私心。'
}
# 分离成语和解释
idioms_list = list(idioms.keys())
meanings_list = list(idioms.values())
# 打乱顺序
random.shuffle(idioms_list)
random.shuffle(meanings_list)
# 将成语和解释分成两列
column1 = idioms_list
column2 = meanings_list
# 创建PDF文件
pdf_file = 'idioms_quiz.pdf'
c = canvas.Canvas(pdf_file)
# 设置字体和字号
c.setFont('ChineseFont', 12)
# 绘制连线题
x = 50
# 初始x坐标
y = 750
# 初始y坐标
line_height = 20
# 行高
for idiom, meaning in zip(column1, column2):
c.drawString(x, y, f'{idiom:<8s}<---->
{meaning}')
y -= line_height
# 绘制答案
c.setFont('ChineseFont', 12)
c.drawString(x, y - 30, "答案:")
y -= 50
# 调整y坐标
for idiom, meaning in idioms.items():
c.drawString(x, y, f'{idiom:<8s}
---->
{meaning}')
y -= line_height
# 保存PDF文件
c.save()
print(f'生成的PDF文件已')
生成的本地 pdf 为 idioms_quiz.pdf二、进阶版上文已经介绍了如何手把手用 chatgpt 实现编程。生成成语和解释,以及乱序在连线实现生成 pdf 文件,但是还不是我想要的。我想要的是每次运行程序都生成一套新题,以至于我自己也可以做着玩。我不能每次都先用 ChatGPT 生成成语再复制到程序里,我必须把这一切给自动化,以至于我只要一个命令,就能得到一套新题。为此,我们必须调用 OpenAl 的 API。API 就是干这个用的,它允许你的机器直接跟 GPT 远程对话,自动返回结果。一)需求进阶于是在前篇文章代码基础上我继续问 chatgpt“做的很好,实现了我的需求,我最终将你提供的代码稍微修改了下,代码我放到{}中,代码如下{具体代码},现在我们改一下程序,从 OpenAl 的 API 调用 GPT3.5 生成成语和解释,制作同样的连线题”二)关联 openai apigpt 又帮我们生成了一份代码,我们需要将自己的 openai api 填写进去。但是运行时报错的,提示是网络错误,需要使自己的网络能够连接 openai 的服务器。然后改了改代码细节,运行就完美实现了我们的需求。代码如下:import random
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
import openai
# 定义中文字体文件路径
font_path = 'C:/Windows/Fonts/simsun.ttc'
# 替换为正确的字体文件路径
# 注册字体
pdfmetrics.registerFont(TTFont('ChineseFont', font_path))
# 设置OpenAI API访问凭据
openai.api_key = 'sk-XXXX'
# 替换为您的OpenAI API访问凭据
openai.api_base = 'https://XXX/v1'#这里是自己的域名,隐私问题隐去了
# 使用GPT-3.5模型生成成语和解释
response = openai.Completion.create(
engine='text-davinci-003',
prompt='输出成语以及对应的解释,中间用:分隔',
max_tokens=300,
n=10,
stop=None,
temperature=0.7
)
idioms_list = []
meanings_list = []
idioms = {}
for choice in response.choices:
text = choice.text.strip().split(':')
#将text转化为字典类型
idioms.update({text[0]:text[1]})
print(idioms)
idiom = text[0]
meaning = text[1]
idioms_list.append(idiom)
meanings_list.append(meaning)
# 打乱顺序
random.shuffle(idioms_list)
random.shuffle(meanings_list)
# 将成语和解释分成两列
column1 = idioms_list
column2 = meanings_list
# 创建PDF文件
pdf_file = 'idioms_2.pdf'
c = canvas.Canvas(pdf_file)
# 设置字体和字号
c.setFont('ChineseFont', 12)
# 绘制连线题
x = 50
# 初始x坐标
y = 750
# 初始y坐标
line_height = 20
# 行高
for idiom, meaning in zip(column1, column2):
c.drawString(x, y, f'{idiom:<8s}
<---->
{meaning}')
y -= line_height
# 绘制答案
c.setFont('ChineseFont', 12)
c.drawString(x, y - 30, "答案:")
y -= 50
# 调整y坐标
for idiom, meaning in idioms.items():
c.drawString(x, y, f'{idiom:<8s}
---->
{meaning}')
y -= line_height
# 保存PDF文件
c.save()
print(f'生成的PDF文件已保存为:{pdf_file}')
三)随机生成 pdf 文件请看随机结果:运行一次代码,就会给生成一套不同的成语题和答案,是不是很好玩。大人孩子都可以一起玩。是不是有点意思。四)最新版本错误解决最近运行发现,该程序已经会报错了,报错如下提示:openai.error.InvalidRequestError: The model `text-davinci-003` has been deprecated, learn more here: https://platform.openai.com/docs/deprecations 意思就是`text-davinci-003`已被弃用。于是我们到该网站查看相关信息:从图中参考信息,于是我们将代码中`text-davinci-003`替换为'gpt-3.5-turbo-instruct'。修改代码后直接执行代码,发现代码可以执行,但是生成的pdf是有额外的多余符号的,如很明显是,我们需要对输出的格式进一步限制下,于是修改代码中的prompt:prompt='输出成语以及对应的解释,中间用:分隔,如内容格式符合要求--- 成语:解释\n,如:"万古长存": "永远存在,永不消逝\n"'再次执行代码,一切完好!完成代码如下:import os
import random
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
import openai
# 定义中文字体文件路径
font_path = 'C:/Windows/Fonts/simsun.ttc'
# 替换为正确的字体文件路径
os.environ["all_proxy"] = 'http://127.0.0.1:7890' # 对应代理地址或科学上网的端口
# 注册字体
pdfmetrics.registerFont(TTFont('ChineseFont', font_path))
# openai.api_base = "https://wangshuang.eu.org/v1/"
# 设置OpenAI API访问凭据
openai.api_key = 'sk-xxxx'
# 替换为您的OpenAI API访问凭据
# 使用GPT-3.5模型生成成语和解释
response = openai.Completion.create(
engine='gpt-3.5-turbo-instruct',
prompt='输出成语以及对应的解释,中间用:分隔,如内容格式符合要求--- 成语:解释\n,如:"万古长存": "永远存在,永不消逝\n"',
max_tokens=300,
n=10,
stop=None,
temperature=0.7
)
idioms_list = []
meanings_list = []
idioms = {}
for choice in response.choices:
text = choice.text.strip().split(':')
#将text转化为字典类型
idioms.update({text[0]:text[1]})
print(idioms)
idiom = text[0]
meaning = text[1]
idioms_list.append(idiom)
meanings_list.append(meaning)
# 打乱顺序
random.shuffle(idioms_list)
random.shuffle(meanings_list)
# 将成语和解释分成两列
column1 = idioms_list
column2 = meanings_list
# 创建PDF文件
pdf_file = 'idioms_2.pdf'
c = canvas.Canvas(pdf_file)
# 设置字体和字号
c.setFont('ChineseFont', 12)
# 绘制连线题
x = 50
# 初始x坐标
y = 750
# 初始y坐标
line_height = 20
# 行高
for idiom, meaning in zip(column1, column2):
c.drawString(x, y, f'{idiom:<8s}
<---->
{meaning}')
y -= line_height
# 绘制答案
c.setFont('ChineseFont', 12)
c.drawString(x, y - 30, "答案:")
y -= 50
# 调整y坐标
for idiom, meaning in idioms.items():
c.drawString(x, y, f'{idiom:<8s}
---->
{meaning}')
y -= line_height
# 保存PDF文件
c.save()
print(f'生成的PDF文件已保存为:{pdf_file}')}

我要回帖

更多关于 vba能实现自动做图表吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信