WPS报表导出插件

1        VB开发WPS插件的步骤

1.1     启动程序

1.1.1      网络上的示例代码

Option Explicit

Implements IDTExtensibility2

Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)

On Error Resume Next ‘防错处理

‘WPS的工具栏对象为 KSO.CommandBar(代表一个工具栏)

‘WPS的工具栏集合为 KSO.CommandBars(代表所有的工具栏)

‘我们可以用KSO.CommandBars提供的Add方法创建一个工具栏,如

Dim myComBar As KSO.CommandBar ‘定义一个工具栏对象

Application.CommandBars("我的自定义工具栏").Delete  ‘一般我们创建新工具栏前要把可能存在的同名工具栏删除

Set myComBar = Application.CommandBars.Add("我的自定义工具栏", ksoBarTop, , True) ‘创建一个工具栏

‘Add方法的四个参数是:工具栏名称,位置,是否以新命令栏替换活动菜单栏,是否是临时命令栏,一般除了第一个名称外,其他三个参数如上设置即可

‘好了,现在我们创建了一个工具栏,但是,工具栏只是一个容器,上面什么也没有,所以我们要在工具栏上创建按钮和弹出菜单:

Dim myPopup As KSO.CommandBarPopup ‘定义一个弹出菜单

Dim myBtn As KSO.CommandBarButton ‘定义一个按钮

Set myPopup = myComBar.Controls.Add(ksoControlPopup, , , , True) ‘创建一个弹出式菜单在工具栏myComBar上

myPopup.Caption = "我是工具栏上的弹出菜单" ‘设定弹出菜单的Caption属性,它将显示在界面上

Set myBtn = myComBar.Controls.Add(ksoControlButton, , , , True) ‘创建一个按钮在工具栏myComBar上

myBtn.Caption = "我是工具栏上的按钮" ‘设定按钮的Caption属性,它将显示在界面上

‘现在工具栏上已经有了一个弹出菜单和一个按钮,但弹出菜单上什么也没有,我们现在在弹出菜单上创建两个按钮:

Set myBtn = myPopup.Controls.Add(ksoControlButton, , , , True) ‘创建一个按钮在弹出菜单myPopup上

myBtn.Caption = "我是弹出菜单上的按钮1"

Set myBtn = myPopup.Controls.Add(ksoControlButton, , , , True) ‘创建一个按钮在弹出菜单myPopup上

myBtn.Caption = "我是弹出菜单上的按钮2"

myComBar.Visible = True ‘最后设置新创建的工具栏的Visible属性为True,让其可见

‘现在有了上面的代码作为模板,你可以做以下几件事件

‘1.创建一个或多个工具栏

‘2.在工具栏上创建一个或多个弹出菜单和按钮

‘3.在弹出菜单上再创建一个或多个按钮

End Sub

Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)

End Sub

Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)

End Sub

Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)

End Sub

Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)

End Sub

1.1.2      初步调整的代码

Option Explicit

Private WithEvents btnNew1 As CommandBarButton

Private WithEvents btnNew2 As CommandBarButton

Private WithEvents btnNew3 As CommandBarButton

Implements IDTExtensibility2

Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)

On Error Resume Next ‘防错处理

‘WPS的工具栏对象为 KSO.CommandBar(代表一个工具栏)

‘WPS的工具栏集合为 KSO.CommandBars(代表所有的工具栏)

‘我们可以用KSO.CommandBars提供的Add方法创建一个工具栏,如

Dim myComBar As KSO.CommandBar ‘定义一个工具栏对象

Application.CommandBars("我的自定义工具栏").Delete  ‘一般我们创建新工具栏前要把可能存在的同名工具栏删除

Set myComBar = Application.CommandBars.Add("我的自定义工具栏", ksoBarTop, , True) ‘创建一个工具栏

‘Add方法的四个参数是:工具栏名称,位置,是否以新命令栏替换活动菜单栏,是否是临时命令栏,一般除了第一个名称外,其他三个参数如上设置即可

‘好了,现在我们创建了一个工具栏,但是,工具栏只是一个容器,上面什么也没有,所以我们要在工具栏上创建按钮和弹出菜单:

Set btnNew1 = myComBar.Controls.Add

btnNew1.Caption = "导出周报"

Set btnNew2 = myComBar.Controls.Add

btnNew2.Caption = "导出周报"

Set btnNew3 = myComBar.Controls.Add

btnNew3.Caption = "配置"

myComBar.Visible = True ‘最后设置新创建的工具栏的Visible属性为True,让其可见

‘现在有了上面的代码作为模板,你可以做以下几件事件

‘1.创建一个或多个工具栏

‘2.在工具栏上创建一个或多个弹出菜单和按钮

‘3.在弹出菜单上再创建一个或多个按钮

End Sub

Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)

End Sub

Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)

End Sub

Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)

End Sub

Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)

End Sub

Private Sub btnNew1_Click(ByVal Ctrl As KSO.CommandBarButton, CancelDefault As Boolean)

MsgBox (1)

End Sub

Private Sub btnNew2_Click(ByVal Ctrl As KSO.CommandBarButton, CancelDefault As Boolean)

MsgBox (2)

End Sub

Private Sub btnNew3_Click(ByVal Ctrl As KSO.CommandBarButton, CancelDefault As Boolean)

MsgBox (3)

End Sub

1.2     注册文件

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Kingsoft\Office\Et\Addins\Work.Report]

"FriendlyName"="WPS加载项Demo"

"Description"="加载项"

"LoadBehavior"=d:00000003

"CommandLineSafe"=d:00000001

1.3     注册步骤

1、  通过VB制作work.dll动态库

2、  制作注册文件work.reg

3、  注册文件:双击work.reg;在运行框中输入:regsvr32 …/work.dll

2        VB开发WPS插件

2.1     VB添加工具栏

Public Sub 创建工具栏弹出菜单按钮()

On Error Resume Next ‘防错处理

‘WPS的工具栏对象为 KSO.CommandBar(代表一个工具栏)

‘WPS的工具栏集合为 KSO.CommandBars(代表所有的工具栏)

‘我们可以用KSO.CommandBars提供的Add方法创建一个工具栏,如

Dim myComBar As KSO.CommandBar ‘定义一个工具栏对象

Application.CommandBars("我的自定义工具栏").Delete  ‘一般我们创建新工具栏前要把可能存在的同名工具栏删除

Set myComBar = Application.CommandBars.Add("我的自定义工具栏", ksoBarTop, , True) ‘创建一个工具栏

‘Add方法的四个参数是:工具栏名称,位置,是否以新命令栏替换活动菜单栏,是否是临时命令栏,一般除了第一个名称外,其他三个参数如上设置即可

‘好了,现在我们创建了一个工具栏,但是,工具栏只是一个容器,上面什么也没有,所以我们要在工具栏上创建按钮和弹出菜单:

Dim myPopup As KSO.CommandBarPopup ‘定义一个弹出菜单

Dim myBtn As KSO.CommandBarButton ‘定义一个按钮

Set myPopup = myComBar.Controls.Add(ksoControlPopup, , , , True) ‘创建一个弹出式菜单在工具栏myComBar上

myPopup.Caption = "我是工具栏上的弹出菜单" ‘设定弹出菜单的Caption属性,它将显示在界面上

Set myBtn = myComBar.Controls.Add(ksoControlButton, , , , True) ‘创建一个按钮在工具栏myComBar上

myBtn.Caption = "我是工具栏上的按钮" ‘设定按钮的Caption属性,它将显示在界面上

‘现在工具栏上已经有了一个弹出菜单和一个按钮,但弹出菜单上什么也没有,我们现在在弹出菜单上创建两个按钮:

Set myBtn = myPopup.Controls.Add(ksoControlButton, , , , True) ‘创建一个按钮在弹出菜单myPopup上

myBtn.Caption = "我是弹出菜单上的按钮1"

Set myBtn = myPopup.Controls.Add(ksoControlButton, , , , True) ‘创建一个按钮在弹出菜单myPopup上

myBtn.Caption = "我是弹出菜单上的按钮2"

myComBar.Visible = True ‘最后设置新创建的工具栏的Visible属性为True,让其可见

‘现在有了上面的代码作为模板,你可以做以下几件事件

‘1.创建一个或多个工具栏

‘2.在工具栏上创建一个或多个弹出菜单和按钮

‘3.在弹出菜单上再创建一个或多个按钮

End Sub

2.2     VB解析XML

Sub ee()

Dim objXMLDom As New DOMDocument

Dim objXMLNodeList As IXMLDOMNodeList

Dim objXMLNode As IXMLDOMNode

Dim document As New DOMDocument

objXMLDom.async = False

objXMLDom.validateOnParse = False

Dim bSuccess As Boolean

bSuccess = objXMLDom.Load("D:\sample.xml")

‘bSuccess = objXMLDom.Load(str)

MsgBox bSuccess

MsgBox objXMLDom.xml

Dim str As String

str = objXMLDom.xml

Dim objXMLNodeList2 As IXMLDOMNodeList

Dim objXMLNode2 As IXMLDOMNode

document.loadXML str

MsgBox document.xml

End Sub

3        导出报表的API

访问的API地址:http://115.28.150.92:80/

config_access_key= e44e560940e5a0a180948ef814804a91

config_secret_key=5792c3964094e0be8077ceb0f145f2e7

周报:

http://115.28.150.92:80/taskreports/get_taskweekreport?access_key=e44e560940e5a0a180948ef814804a91&secret_key=1a14605e4077eacb80812cc85cc4a120&user_id=5510f536409454a2803db85754686cb3&week_start=2014.41&week_end=2014.41

月报:

http://115.28.150.92:80/taskreports/get_taskmonthreport?access_key=e44e560940e5a0a180948ef814804a91&secret_key=5792c3964094e0be8077ceb0f145f2e7&user_id=2a446e0e40e01356801344a4a9a3af84&month_start=2014.9&month_end=2014.9

4        WPS表格开发遇到的问题

4.1     Run-time error ’91’

1)问题:在点击事件中添加下列代码

Dim fm As Form1

fm.show

将会报下面的错误

Run-time error ’91’

Object variable or with block variable not set(有一个对象变量定义了,但是没有设置)

2)对策:

修改代码如下

Dim fm As New Form1

fm.show

3)新问题:Run-time error ’406’

Non-modle forms cannot be display in this host application from an Active Dll,Active Control,or Property Page(不可以通过Active动态库、Active控件、属性页在宿主程序中显示非模态窗口)

4)新对策:修改为模态窗口

Dim fm As New Form1

fm.show(1)

4.2     修改了月报的样式,导不出数据结果。

4.2.1      判断是否有同名的Sheet

try: On Error GoTo catch

‘新建月报的表

Set xlApp = GetObject(, "ET.Application")

‘判断当前是否有workbooks,有的话选择当前活动的,没有的话则新建一个

If xlApp.Workbooks.Count > 0 Then

Set xlBook = xlApp.ActiveWorkbook

Else

Set xlBook = xlApp.Workbooks.Add

End If

‘ Dim i As Integer

‘ For i = 1 To xlBook.Worksheets.Count - 1

‘ xlBook.Worksheets(i).Delete

‘ Next

‘ Set xlSheet = xlBook.ActiveSheet

Set xlSheet = xlBook.Sheets.Add

xlSheet.Name = strSheetName

NewMonthSheet = True

finally:

MsgBox "quit"

xlApp = Nothing

Exit Function

catch:

MsgBox "新建工作簿出错"

Resume finally

4.2.2      http获取信息

周报点击事件

Private Sub btnNew1_Click(ByVal Ctrl As KSO.CommandBarButton, CancelDefault As Boolean)

‘获取周报

Dim bytData() As Byte

Dim objHTTP As Object

Dim url As String

try: On Error GoTo catch

url = "http://115.28.150.92:80/taskreports/get_taskweekreport?access_key=e44e560940e5a0a180948ef814804a91&secret_key=5792c3964094e0be8077ceb0f145f2e7&user_id=2a446e0e40e01356801344a4a9a3af84&week_start=2014.40&week_end=2014.40"

Set objHTTP = CreateObject("MSXML2.XMLHTTP")

objHTTP.Open "GET", url, False

objHTTP.send

If objHTTP.Status = 200 Then

bytData = objHTTP.responseBody

Debug.Print StrConv(bytData, vbUnicode)

bytData = UTF8_Decode(bytData)

‘MsgBox (bytData)

‘解析Json串,必须先将Byte类型转换为string类型

Dim ss As String

ss = bytData

Dim strXML

strXML = ParseJson(ss)

‘ MsgBox (strXML)

‘解析周报

ParseWeeklyXML (strXML)

End If

finally:

Set objHTTP = Nothing

Exit Sub

catch:

MsgBox "请求失败,请确认输入的请求信息有效"

Resume finally

End Sub

4.3     导出周报的格式要求

1、  不要擅自修改周报的报表格式,否则会导致导出的数据出错

2、  周报的各行依次是:标题、周一天的具体工作内容(不要留有空行,否则解析错误)、周报总结和计划。

3、  周报最后三行必须是:本周工作总结、下周工作计划、本人建议(一般情况,本人建议为空,但是也不能将其删除)

4、  获取JSon字符串后,需要将其空格剔除,否则不能xml解析

5        插件部署测试

5.1     部署方式

以注册文件的方式,写批处理文件setup.bat

1、  注册日期控件。一般的机器是没有注册日期控件MSCOMCT2.OCX,判断机器的位数再注册日期控件

2、  安装WPS ET插件。分成两步:写注册表,注册动态库。

3、  批处理文件如下:

点击安装

@该插件实现在WPS ET导出NercOA报表

ECHO 注册VB的日期控件

if %processor_architecture%==x86 (echo 32位)

copy MSCOMCT2.OCX %windir%\system32\

else (echo 64位)

copy MSCOMCT2.OCX %windir%\SysWOW64\

regsvr32 MSCOMCT2.OCX /s

ECHO 请稍等

ECHO 安装WPS ET插件

regedit /s  WPSETPlugin.reg

ECHO 请稍等

ECHO 注册wps的动态链接库

regsvr32 work.dll /s

ECHO 请稍等

EXIT

5.2     出现的问题

1、加载项未成功

原因:批处理注册文件失败,原因权限不够

对策:分步写注册表、注册文件

新问题:…已加载,但对DllRegisterServer的调用失败。

原因:操作用户的权限不够

新对策:以管理员身份打开“命令提示符”,输入“regsvr32 …\work.dll”,显示注册成功

2、获取个人周报的数据不全

显示XML解析错误

3、http请求失败,获取用户基本信息出错

objHTTP.Open "GET", url, False 出错

弹出的错误信息:

时间: 2024-07-30 15:56:18

WPS报表导出插件的相关文章

jsexcel导出插件

ExcelTable.js 1 /* 2 * author:wenluanlai 3 */ 4 (function ($) { 5 Date.prototype.Format = function (fmt) { 6 var o = { 7 "M+": this.getMonth() + 1, //月份 8 "d+": this.getDate(), //日 9 "h+": this.getHours(), //小时 10 "m+&qu

kettle工具实现报表导出的初步搭建

1.下载kettle 国外网站:http://kettle.pentaho.org/需要FQ,下载慢 2.下载完成启动(windows)-->spoon.bat 3.进入界面,两个主要的tab页 4.第二个tab页里用到的 5. 第一步设定REST接口需要的参数(比如URL) 第二步调用REST接口 第三步使用JSON控件接收REST返回数据 第四步将返回数据输出到Excel中 6.url返回的json数据 7.运行结果: 8.如果自己链接数据库的话,会缺少数据库驱动,需要在lib包下面加上,如

【HOW】如何限制Reporting Services报表导出功能中格式选项

Reporting Services报表导出功能中缺省会提供多种导出格式选项,但很多情况下不需要全部的格式选项,因此需要对这些选项进行限制.下面我们以SQL Server 2008 R2为例来说明对这些选项进行限制的方法. 1. 打开报表服务配置文件:"C:\Program Files\Microsoft SQL Server\MSRS10_50.QUIST\Reporting Services\Report Server\ rsreportserver.config". 2. 在上述

Silverlight程序之:简单的Excel报表导出方法

Silverlight程序之:简单的Excel报表导出方法 概述 介绍一种简单的Excel报表导出方法. 页面效果 导出效果: 首先我们创建一个Excel表格,将我们的基本信息格式都设置好,如下图所示: 将创建好的Excel表格另存为网页. 打开VS将创建好的报表模版网页文件拖到Web项目新建的Report文件夹 修改其后缀名为aspx 打开文件 添加头部代码 <%@ Page Language="C#" ContentType="application/vnd.ms-

SAP关于标准ALV报表导出Excel的问题与解决:长数字

SAP关于标准ALV报表导出Excel的问题与解决:长数字 描述:在使用标准ALV功能时,使用本地文件可以把内容导到EXCEL中 问题:如果在报表中有类似银行账户.身份证号等较长数字的字段,直接导出EXCEL,在EXCEL中这些字段将会使用科学计数法的格式显示导致这列数据不正确. 解决方法一:导出时选择未转换的格式,然后再整理(分列) 解决方法二:使用ALV工具栏中按钮Excel适当位置 解决方法三:导出—电子表格—所有可用格式(选择“在现有XXL格式中”) ALV 导出电子表格的文件格式固定了

引擎设计跟踪(九.14.2a) 导出插件问题修复和 Tangent Space 裂缝修复

由于工作很忙, 近半年的业余时间没空搞了, 不过工作马上忙完了, 趁十一有时间修了一些小问题. 这次更新跟骨骼动画无关, 修复了一个之前的, 关于tangent space裂缝的问题: 引擎设计跟踪(九) 3DS MAX 导出插件 引擎设计跟踪(九.10) Max插件更新,地形问题备忘 这里说明一下修复方法, 并且做一个总结. 之前的做法都不算错, 但是不完善. 这里有缝, 主要是因为那个战争机器3的模型本身已经复制了顶点( 左半部分和右半部分是不同的mesh, 有重合的顶点), 接缝处的顶点虽

万圣节福利:红孩儿3D引擎开发课程《3ds max导出插件初步》

红孩儿3D引擎开发课堂 QQ群:275220292 国内最详尽教授怎样开发3D引擎的地方!揭开3D引擎开发最不为人知的秘密! 万圣节福利,国内最详尽的3ds max导出插件编程指南0基础篇免费发放!            前言:今天网易的<乱斗西游>上线AppStore ,将继完美世界<黑暗黎明>后再次证明自研引擎的实力!假设你想成为引擎研发高手,那么,一切,将从3ds max导出插件起步~ 第九章课程<3ds max导出插件初步> 一.3ds max导出插件简单介绍:

3DsMax导出插件编写(二)——常规SDK方法进行信息获取和保存文件

之前已经把配置vs和maxSdk的方法介绍过了,如果不懂怎样配置的朋友请参考: http://liweizhaolili.blog.163.com/blog/static/162307442013117731953/ 下面来介绍一下导出插件的具体写法.不过这不是一个容易说的很详细的问题.因为我们要写导出插件,通常都是因为想根据自己想要的信息来导出,所以就算我把我整个工程都公开,意义也不大的,因为那是根据我自己需要的数据写的业务,估计不太可能和你想要的一样的.所以我也只能简单的说明一些几个关键获取

3DsMax导出插件编写(一)——vs2010和3dsmax2011(64位)的配置方法

作为3D开发人员,特别是3D引擎开发人员,经常会接触到各种三维模型的数据.虽然说3dsmax已经可以导出很多格式的模型,不过总是不一定合适自己用.所以总有一种想自己写一个导出插件,让3dmax导出自己想要的数据格式.这里为大家介绍一下怎样为3dmax写导出插件的第一步:怎样配置vs和maxSdk. 这里你需要的东西有两个: 1.一个完整版的3dsMax. 2.一个Visual Studio. 为什么是要完整版的3dsMax呢?这是因为完整版本的3dsMax的安装文件自带有maxSdk.这是很重要