文章目录

  • Golang使用Windows底层开发那些事
  • 第三库go-ole
  • 将Word转pdf
  • Excel设置页面和边框、转PDF
  • 总结

Golang使用Windows底层开发那些事

通过上一篇博客知道,Python可以通过pywin32实现Windows底层开发,最常见的是word和Excel处理,自动打印等等。
我曾经说过,编程语言只是工具,只要工具玩的溜,一切皆有可能。按照上一篇博客实现的功能,使用Golang同样能实现。
Golang调用Windows底层接口,可以借助第三方库github.com/go-ole/go-ole
如果对Golang熟悉的话,不妨看看go-ole源码,从源码文件发现,它是通过标准库syscall调用Windows底层文件dll实现的,如图所示


大致了解第三库go-ole底层原理之后,下一步就讲述如下使用。

第三库go-ole

第三库go-ole虽然没有文档说明,但已提供示例代码讲述如何使用。分析示例代码得知,整个库无非就调用这么几个函数方法:
oleutil.CreateObject(“Excel.Application”):创建对象,固定写法,CreateObject的参数可变的。
unknown.QueryInterface(ole.IID_IDispatch):查询接口,固定写法。
oleutil.PutProperty():设置对象的属性。
oleutil.GetProperty():获取属性。
oleutil.MustGetProperty().ToIDispatch():获取属性,在GetProperty()基础上在封装一下。
oleutil.CallMethod():调用方法。
oleutil.MustCallMethod():调用方法,在CallMethod()基础上在封装一下。
Release():释放资源。
ole.CoInitialize(0):初始化。
ole.CoUninitialize():释放资源。
使用win32com调用com组件的时候,需要用ole.CoInitialize初始化一下,最后还需要用ole.CoUninitialize释放资源。
整个库主要使用上述的函数方法,有关各个函数参数就自行查看源码定义或示例代码的具体使用了。

将Word转pdf

示例代码没有延时Word如何使用,但可以通过微软官网文档找到具体的使用方法,示例代码如下:

package mainimport (ole "github.com/go-ole/go-ole""github.com/go-ole/go-ole/oleutil"
)func setWord(fileName string)  {ole.CoInitialize(0)unknown, _ := oleutil.CreateObject("Word.Application")word, _ := unknown.QueryInterface(ole.IID_IDispatch)oleutil.PutProperty(word, "Visible", false)documents := oleutil.MustGetProperty(word, "Documents").ToIDispatch()document := oleutil.MustCallMethod(documents, "Open", fileName).ToIDispatch()oleutil.MustCallMethod(document, "SaveAs2", "E:\\mygo\\bb.pdf", 17).ToIDispatch()document.Release()documents.Release()word.Release()ole.CoUninitialize()
}func main() {setWord("E:\\mygo\\abc.docx")
}

Excel设置页面和边框、转PDF

对于Excel的操作,示例代码没有太多说明,也是可以结合微软官网文档实现我们想要的功能,代码如下:

package mainimport (ole "github.com/go-ole/go-ole""github.com/go-ole/go-ole/oleutil"
)func setExcel(fileName string){ole.CoInitialize(0)unknown, _ := oleutil.CreateObject("Excel.Application")excel, _ := unknown.QueryInterface(ole.IID_IDispatch)oleutil.PutProperty(excel, "Visible", false)workbooks := oleutil.MustGetProperty(excel, "Workbooks").ToIDispatch()workbook, _ := oleutil.CallMethod(workbooks, "Open", fileName)//defer workbook.ToIDispatch().Release()worksheet := oleutil.MustGetProperty(workbook.ToIDispatch(), "Worksheets", 1).ToIDispatch()//defer worksheet.Release()ps := oleutil.MustGetProperty(worksheet, "PageSetup").ToIDispatch()oleutil.PutProperty(ps, "LeftHeader", "")oleutil.PutProperty(ps, "CenterHeader", "")oleutil.PutProperty(ps, "RightHeader", "")oleutil.PutProperty(ps, "LeftFooter", "")oleutil.PutProperty(ps, "CenterFooter", "")oleutil.PutProperty(ps, "RightFooter", "")oleutil.PutProperty(ps, "LeftMargin", 0)oleutil.PutProperty(ps, "RightMargin", 0)oleutil.PutProperty(ps, "TopMargin", 0)oleutil.PutProperty(ps, "BottomMargin", 0)oleutil.PutProperty(ps, "HeaderMargin", 0)oleutil.PutProperty(ps, "FooterMargin", 0)oleutil.PutProperty(ps, "Orientation", 2)oleutil.PutProperty(ps, "Zoom", false)oleutil.PutProperty(ps, "FitToPagesWide", 1)oleutil.PutProperty(ps, "FitToPagesTall", false)oleutil.PutProperty(ps, "CenterVertically", true)oleutil.PutProperty(ps, "CenterHorizontally", true)oleutil.PutProperty(ps, "Draft", false)oleutil.PutProperty(ps, "FirstPageNumber", true)oleutil.MustCallMethod(worksheet, "ExportAsFixedFormat", 0, "E:\\mygo\\aa.pdf").ToIDispatch()ps.Release()worksheet.Release()workbooks.Release()excel.Release()ole.CoUninitialize()
}func main() {setExcel("E:\\mygo\\abc.xls")
}

保存文件的时候,最好使用绝对路径,如果使用相对路径,最终保存的文件可能不在go文件所在的路径。

总结

不管是用Python还是Golang实现Windows底层开发,最终实现功能都要依赖微软官网文档提供的接口方法。
此外,Golang还可以实现打印机功能,例如网络打印功能

Golang 实现word和Excel处理相关推荐

  1. pyhon制作word、excel、ppt转pdf转换器大作战

    很久很久没有写博客了.倒不是技术退步了,相反,这些年我从javascript开始,把主流语言基本都摸了个遍.然而编程的很多东西,用进废退,只要很短的一段时间不用就会遗忘很多.所以有些东西忙的时候没有及 ...

  2. 在线文件(Word、Excel、PPT、PDF)预览

    Go File View 是基于 Golang 的在线文件(Word.Excel.PPT.PDF)预览程序,受 kkFileView 启发并基于其 Web 前端开发. 使用spring boot打造文 ...

  3. javascript 操作Word和Excel的实现代码

    1.保存html页面到word 复制代码 代码如下: <HTML> <HEAD> <title> </title> </HEAD> < ...

  4. 在word、excel中如果运用VBA进行编程?

    VBA简介 VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言.主要能用来扩展Wi ...

  5. delphi memo 行数 自动换行_大咖分享办公秘籍:Word和Excel换行

    我们在日常办公和学习中,对文档进行整理和粘贴数据的过程中,经常会用到的就是换行功能了.那么怎么实现自动换行呢?下面,就由非凡学院商务办公培训专业的付老师,和大家分享一下在Word和Excel中简单的实 ...

  6. 如何保存PDF、Word和Excel文件到数据库中

    在项目中,有时候我们很需要把PDF.Word和Excel文档等等上传到数据库,以便日后使用.今天这篇文章向大家讲解如何将这些文件保存到数据库的. 详细步骤 第一步:打开数据库,单击新建查询,创建一个名 ...

  7. office(Word、Excel、PPT等图标异常和桌面无新建解决方案)

    office(Word.Excel.PPT等图标异常和桌面无新建解决方案) 参考文章: (1)office(Word.Excel.PPT等图标异常和桌面无新建解决方案) (2)https://www. ...

  8. 用access做考场桌贴_利用Word、Excel、Access进行考务安排及学生成绩分析的有效途径-教育文档...

    利用 Word . Excel . Access 进行考务安排及学生成绩 分析的有效途径 一 问题的提出 在新课改教学评价过程中,学生考试评价扮演着重要的角 色. 考试安排的科学性和有效性是评价的基础 ...

  9. 利用ASP.NET输出指定内容的WORD、EXCEL、TXT、HTM

    利用ASP.NET输出指定内容的WORD.EXCEL.TXT.HTM等类型的文档很容易的.主要分为三步来完成. 一.定义文档类型.字符编码 Response.Clear(); Response.Buf ...

最新文章

  1. 矩阵的逆以及实际应用
  2. Weex Flexbox弹性布局使用
  3. 大型计算机主机通常采用,全国计算机一级选择题真题集
  4. python中with的用法,上下文管理器
  5. linux usb 重启,在ubuntu下重启指定的USB口
  6. esxi安装openwrt_双软路由安装——ROS安装、上网、DNS缓存、常用设置(小白教程)...
  7. ssd windows未能启动服务器,ssd安装win10无法启动你安装方法对吗?来看一下
  8. my eclipse 类似dreamweaver编辑html,8款替代Dreamweaver的开源网页开发工具
  9. 记一次,jvm 内存溢出
  10. 很牛的vim使用技巧nbsp;转载来的
  11. (OK) Linux epoll模型—socket epoll server client chat
  12. 华为hcie题库有多少题?华为认证hcie面试需要注意什么?
  13. java中resultset的previous_在 Java中,已获得默认类型的ResultSet对象rs,要获得结果集中的数据,必须执行的语句是( )。_学小易找答案...
  14. 大学生 大创 软著申请指南(图文含模板)(专用于大创,这篇就够了!纯干货!)
  15. 雷达散射截面(RCS)
  16. 产品原型绘制要求与规范
  17. 使用超终端连接Cisco 2950交换机步骤,通过console口
  18. Digital Ocean 搭建属于自己的网站
  19. 淀粉肽Amyloid β-Protein (1-24)、Aβ1-24|138648-77-8|DAEFRHDSGYEVHHQKLVFFAEDV
  20. 隧道技术(Tunneling)

热门文章

  1. PLC振荡电路——控制灯闪烁
  2. 安卓开发实战讲解!史上最全的Android面试题集锦,深度好文
  3. python爬虫之爬取网易云音乐的歌曲图片和歌词
  4. 安防市场视频监控比重大 并有新商机
  5. Word中的字体大小(几号-几磅)
  6. 天池大数据众智平台笔记SQL(一)
  7. 解决echarts的title和legend重合问题(转)
  8. hp1020打印机驱动下载地址
  9. 基片集成波导原理_基片集成波导
  10. 知乎好物推荐怎么做赚钱?该如何做?