将Excel文件(xlsx)中的联系人和电话转换成vcard文件(.vcf),并用pyinstaller打包发布

效果:
将一个Excel表格和该脚本放入同一个文件夹下,运行脚本,输入感兴趣的联系人所在行序号,直接生成vCard文件

步骤:

  1. 获取同文件夹下的绝对路径(用于pyinstaller打包)
  2. 读取绝对路径下的xlsx文件数据(要input的:联系人和电话所在列数,以及要输出的数据行数)
  3. 套用vcf格式,在绝对路径下写入vcf文件

坑很多:

  1. Mac上打的包在win上运行不成,这一点是改变不了的
  2. 获取绝对路径是一个很难的活,因为绝对路径要在打包后生效,开始我用filedir=file,在idle中可以获取到路径,打包后exe文件获取失败,最后在这位大神博客中找到了答案link
  3. 编一个程序很容易,编一个用户友好的程序很难,因为要考虑所有用后可能遇到的情况。。。
from openpyxl import load_workbook
import time
import os
import sysdef read_xlsx(path):''''''#return [[changed_name,phone_num],...] listexcel = load_workbook(path) #读表操作:# sheet_names = excel.get_sheet_names()#方法得到工作簿的所有工作表# print(sheet_names)table = excel.activeprint('将对如下sheet进行读取联系人:',table.title,'.如果有误请保存一下表格文件并重启该程序')result=[]while True:try:in_=input('请输入联系人姓名和电话所在列的数字,逗号分隔,回车确认')if ',' in in_:c_name,c_phone=in_.split(',')else:c_name,c_phone=in_.split(',')input_=input('请输入想要读取到手机的联系人起始和终止条目对应的行序号,以逗号分隔,回车确认')if ',' in input_:r_begin,r_end=input_.split(',')else:r_begin,r_end=input_.split(',')fuck=int(c_name)bitch=int(c_phone)begin=int(r_begin)end=int(r_end)breakexcept :print('输入错误,重新输入')#begin readtimes=end-begin+1for time in range(times):item=[]name=table.cell(begin+time,fuck)#行列时情况而定!!!!!!!!!!!!!name='%s'%str(begin+time)+name.valuephone=table.cell(begin+time,bitch).value#行列时情况而定!!!!!!!!!!!!!item.append(name)item.append(phone)result.append(item)return result,r_begin,r_enddef write2file(result,f_dir,begin='1',end='2'):#write result to f_dir/f=open('%s/联系人%s到%s.vcf'%(f_dir,begin,end),'w',encoding='utf-8')for item in result:name=item[0]num=item[1]stencil='BEGIN:VCARD\nVERSION:3.0\nFN:%s\nN:;%s;;;\nTEL;TYPE=VOICE,CELL,pref;VALUE=text:%s\nUID:69E7CCC1-7AC2-F741-865D-C9BDF3AA763F\nEND:VCARD\n'%(name,name,num)f.write(stencil)f.close()print('done!')time.sleep(5)def read_xlsx_name(abs_dir):#得到绝对路径里面的所有xlsx文件名列表【file1,file2...】gener=os.walk(abs_dir)try:self_=gener.__next__()except StopIteration:print(abs_dir)print(gener)input('读取路径错误')passobj_file=[]for f in self_[2]:if os.path.splitext(f)[1]=='.xlsx':obj_file.append(f)#处理._文件名.xlsx的情况def remove():for i in obj_file:##################################['~$test.xlsx', 'test.xlsx']if i[2:] in obj_file:obj_file.remove(i)#print('remove')remove()if len(obj_file) != 1:remove()if len(obj_file) != 1:print('该文件夹下没有表格文件或多于一个表格文件',obj_file)time.sleep(20)os._exit(0)return obj_file[0]if __name__=='__main__':#获得绝对路径abs_dir = os.path.dirname(os.path.realpath(sys.executable))#print(abs_dir,'--1')#获得同级文件夹内的xlsx文件名obj_file=read_xlsx_name(abs_dir)#print(obj_file)result = read_xlsx('%s/%s'%(abs_dir,obj_file))#input('result%s'%result[0][0][0])information=result[0]begin=result[1]end=result[2]#input('Now, let us write2file')write2file(information,abs_dir,begin,end)

好了,一个喜欢编程的非专业人员想要编一个程序刚开始真的很难,因为身边没有人可以讨论的。这些代码我断断续续写了三天。。。但是每当解决了一个bug带给我的喜悦真的是发自内心的。真后悔当初没进软件工程专业。佛不渡我人自渡,且行且行且珍惜吧。

将Excel文件(xlsx)中的联系人和电话转换成vcard文件(.vcf),并用pyinstaller打包发布相关推荐

  1. 如何使用Python语言将测量数据曲线动起来? matplotlib转换成 GIF文件

    简 介: 本文就如何使用的Python中的Matplotlib绘制的图运动起来进行讨论.实际上是生成多个图片,将它们合成一个动图.编写了PlotGIF函数,将matplotlib绘制的图片存储,然后生 ...

  2. 利用Python批量将.dat文件转换成.csv文件

    今天处理一些dat文件的时候,要进行批量转换成CSV文件,如果直接进行转换会遇到一行中有多个数据的问题,因此要进行替换,操作程序如下: import os import pandas as pdpat ...

  3. stata中超好用小命令:一键将excel文件转换成dta文件

    xls2dta命令:将excel文件转换成dta文件 在stata应用中,往往需要对多个excel中的数据进行处理,这就需将excel格式的数据转化为stata格式的数据,通常的做法是读入(impor ...

  4. 将excel(xls/xlsx)转换成csv文件

    将excel(xls/xlsx)转换成csv文件 首先pom.xml 需要引进的包如下: <dependency><groupId>net.sourceforge.jexcel ...

  5. 用Java将Excel的xls和xlsx文件转换成csv文件的方法, XLS2CSV, XLSX2CSV

    利用poi将excel文件后缀为.xls .xlsx的文件转换成txt/csv文本文件 首先,引入所需的jar包: <dependencies>2 <dependency>3 ...

  6. Python 实现office单个文件或整个文件夹(word,ppt,excel)转换成PDF文件,并获取PDF文件页数

    Python 实现office单个文件或整个文件夹(word,ppt,excel)转换成PDF文件,并获取PDF文件页数 文件夹中获取需要转换的文件数,将其全部转换或可单独转换单个文件,并获取转成PD ...

  7. node-js——将excel表格转换成json文件

    文章目录 将excel表格转换成json文件 步骤 一.引用nodejs的xlsx模块,读取表格的数据 二.引入fs模块,创建文件并写入 三.写一个bat脚本,双击自动执行nodejs文件 示例文件下 ...

  8. Java实现从Excel文件转换成XML文件(一)

    实现思路:         直接从Excel文件装换成XML文件是可以实现的,这里我采用一个中间装换,也就是先实现excel文件内容放入实现设计好的access数据库文件中,然后再从access中读取 ...

  9. word学习/word如何显示空格/LaTeX格式转为Word格式/ latex中的公式格式如何转换成word中的公式格式/excel复制到word表格过大超出

    以windows的word365为例进行讲解,主要分为显示,公式,表格,图片,审阅以及写作方式(含Latex格式转换). 常用快捷键: f4: cmd + y 查找: cmd + shift + h ...

  10. Java使用aspse实现Excel文件转换成PDF文件

    使用Java代码把Excel文件转换成PDF文件 需要引用aspose包,引入操作我写了一个博客,地址如下 https://blog.csdn.net/weixin_46713508/article/ ...

最新文章

  1. Redhat Linux网卡配置与绑定
  2. 电路邱关源第五版pdf_硬件狗教你学电路【二】:电路分析方法
  3. Redis学习日记-05:SORT命令
  4. [习题].FindControl()方法 与 PlaceHolder控件 #2(动态加入「子控件」的事件)
  5. 高效的JavaScript.
  6. 最简单的git merge 和git rebase 介绍和示例演示
  7. Ubuntu下在Apache中运行Keystone
  8. [转载] 七龙珠第一部——第047话 发现龟仙屋
  9. 元胞自动机生命游戏C语言并行实现
  10. (7)机器学习之make_bolbs
  11. PHP调整网页,用PHP程序实现支持页面后退的两种方法
  12. java模拟器.apk_java游戏模拟器安卓版下载-java模拟器apk下载 v2.2.0 安卓版-IT猫扑网...
  13. 计算机网络安全员好就业吗,网络安全就业前景怎么样?
  14. mac word 复制自动产生书签
  15. VHDL中的行为描述、数据流(RTL)描述和结构描述
  16. 远程工具之一---rsync用法介绍
  17. android屏幕 录制检测,Android 录制屏幕的实现方法
  18. LogicFlow 边的绘制与交互
  19. Goto 桌面搜索 插件的使用
  20. 嵌入式面试_面试宝典整理(包括内核)

热门文章

  1. 七代处理器装win7_为什么7代cpu装不了win7
  2. qtcreator编译qt程序是如何调用moc的,如何通过pro文件向moc传入参数
  3. git add所有文件
  4. 提高排名的 15 个基本 SEO 技巧
  5. 百度官方的6个SEO建议
  6. 大学生破译周鸿祎手机号 李开复放 橄榄枝
  7. python 利用matplolib给绘制的地图添加方框,将所需的区域圈出来
  8. Unity机器学习3 ML-Agents模仿学习(Imitation Learning)
  9. Sql Server 2008 配置服务器,并让客户端连接
  10. visual studio code打不开