设为首页 收藏本站
查看: 1134|回复: 0

[经验分享] 用Python,将 Excel 数据导出到 xml

[复制链接]

尚未签到

发表于 2015-4-21 12:13:25 | 显示全部楼层 |阅读模式
  在windows软件开发中经常会遇到配置信息的保持读取。
  简单配置信息经常会快速的想到 .ini当配置信息稍微复杂一些的时候我们通常会很快想到用 xml 来配置,
  在后台开发中,xml概念则更强。基本小型配置信息也用 xml 来配置
  
在游戏开发中,通常会提到一个配置信息相关概念 '表格',
  在各个系统的设计当中通常会考虑到系统是表格驱动,
  在不同的人员眼里,'表格' 代表不同。在策划眼里,通常代码强大 excel 表格,在程序眼里通常是 xml 或者特殊的二进制格式
  
表格驱动有一个很大的好处,就是高度灵活的可配置性。
  这样只要不是大规模改动,通常可以策划该表就完成功能,而不需要到改动程序。
  
为了很好的实现系统的表格驱动,通常都会用一套机制实现excel和xml的转换。
本来心里一直有想法,想做一个 excel 到 xml 的 小转换工具,一直太忙,念头也就慢慢消失了。
  这两天偷得半日闲,在网上看到接触到Python的excel解析工具包,就试着写了下。以前虽也知道python ,但从没认真学过,这次也算python入门了。
  
先谈谈总体设计:
  
一个满足需求的excel解析封装:XLS2XML_excelPares, 主要提供一些从 excel 读取数据的接口
  一个满足需求的xml 写入封装 :XLS2XML_xmlWrite, 主要提供一些对 xml 写入的 接口
  还有一个是配置管理器:XLS2XML_ConfigManager, 主要定义 xls 与 xml 格式转换的标准,类似 xml 的 xsd
  
  XLS2XML_excelPares  细节:
  
  由于在转的过程中,主要涉及的操作是 从 excel 读取数据,
  然后写入 xml, 所以在设计  XLS2XML_excelPares  模块的时候就更多倾向于封装 读取数据
  这里主要封装了三个接口,打开加载 excel 文件,定位 sheet, 获取 sheet 里面的对应位置的数据
  
  OpenXLs(xlsName),  
  GetSheet(SheetName),  
  ReadXLSItem(sheet, rowIndex, colIndex)
  
  XLS2XML_xmlWrite 细节:
  
  在转的过程中,相关xml的操作绝大部分是写入操作,所以考虑封装写接口,xml的写入设计到一个路径概念,
  所以这个封装需要把路径解析放入,然后输出到文件
  
  CreateXML(xmlName)
  AddElemnt( parent, path, value )
  WireteXML(xmlTab)
  
  XLS2XML_ConfigManager 是一个格式定义,这个格式定义其实已经在前面两个模块做了一些隐性引用,这里只是把这些规则,明确化,
  然后规则可以通过外部输入,
  用一句话来说明这个配置模块的定义:把 '哪' 些 excel 里面的 '哪' 些数据,已 '哪' 种格式输出到 '哪' 个xml
  通过简单分析就知道 XLS2XML_ConfigManager  该定义哪些数据了。 把上面话的中的所有的 '哪' 定义出来就可以了
  
  excelName, excelSheet, excelSheetItem, xmlItemName, xmlFileName
  
  所以每一个数据都通过 上述的 五个信息可以精确的从 excel 转到 xml , 大致的接口就是
  
  CreateTabConfig(tabname)
  AddSheet(tabConfig, excelName, excelSheet)
  AddItem(excelSheetItem, xmlItemName)
  ConvertXML(tabConfig, xmlFileName)
  
  有了上面的设计概念,实现就相当简单了,具体代码页不在这里贴了。
  
  通过上面的小工具对数据做如下转换:
DSC0000.png
  转成:
DSC0001.png
  
  后记:
  其实以前也尝试过用 C++ 来做这个,参考过 libxl, 用这个其实也很方便,一个 libxl, tinyxml, 就搞定了
  在上述的设计中,有一个小的扩展没有提到 默认值选项,值替换选项,这些选项其实也可以很容易的加入到上述的设计中,这里不在累述
  
  Sign Clown 2010.8.24 22:19 HDPY,
  [本文原创,转载请注明出处,在文章末尾提供原文链接http://www.iyunv.com/JefferyZhou/,否则一旦发现,将按字节每人民币收费,绝不论价]

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59225-1-1.html 上篇帖子: Python测试开发分享感悟 下篇帖子: 微信开发 企业号(二)-- 回调模式之Tooken验证 .net/python
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表