这几天公司有个报表开发需求,UI要求也相当高,讨论决定使用excel模版来做报表需求。
报表开发主要使用宏,后端是JAVA调用POI进行隐藏sheet的数据填充,最后执行宏绘制报表。
宏如下:
特别注意的是注释那段,当关闭excel后会报告excel格式错误问题,但手动操作的没问题,非常怪异,特此标记一下。
VBA代码可以进一步进行优化,不过在那里面写真的是没eclipse方便...
另外经常写到循环或者判断的时候,打进去的代码居然是JAVA代码,悲催啊...
丫的,突然想起来这货不是JAVA啊~~~
报表开发主要使用宏,后端是JAVA调用POI进行隐藏sheet的数据填充,最后执行宏绘制报表。
宏如下:
Sub auto_Open() Sheets("i18n").Select v = Range("B2").Value If v = 0 Then TravellerReprot Sheets("i18n").Select Range("B2").Value = 1 Sheets("Traveller Anlysis Report").Select ActiveWorkbook.Save End If Sheets("Traveller Anlysis Report").Select End Sub Rem 差旅人报表数据 Sub TravellerReprot() '------------------------常量定义------------------------ '预留行数 Const limitNum = 23 '数据开始行数 Const startNum = 7 'en_US Const en_US_TitleMain = "Business Travel Account" Const en_US_TitleMain2 = "Traveler Analysis Report For 2012-01-01 To 2012-03-01" Const en_US_AccountName = "Account Name:" Const en_US_AccountNumber = "Account Number:" Const en_US_GenerationDate = "Generation Date:" Const en_US_Traveler = "Traveler" Const en_US_Class = "Class" Const en_US_Routing = "Routing" Const en_US_DeptDate = "Dept Date" Const en_US_TicketNumber = "Ticket Number" Const en_US_ValueRMB = "Value RMB" Const en_US_BottomName = "This is a management information report and is not to be used for accounting purposes" Const en_US_Page = "Page Number 1 Of 1" Const en_US_TotalReport = "Report Totals" 'zh_CN Const zh_CN_TitleMain = "商务旅行账户" Const zh_CN_TitleMain2 = "员工差旅分析(2012-01-01 到 20120-03-01)" Const zh_CN_AccountName = "企业名称:" Const zh_CN_AccountNumber = "企业编号:" Const zh_CN_GenerationDate = "报表生成日期:" Const zh_CN_Traveler = "差旅人" Const zh_CN_Class = "舱位" Const zh_CN_Routing = "航程" Const zh_CN_DeptDate = "起飞/交易日期" Const zh_CN_TicketNumber = "票号" Const zh_CN_ValueRMB = "交易金额" Const zh_CN_BottomName = "这是一个管理信息报告且不被用于会计目的" Const zh_CN_Page = "第1页 共1页" Const zh_CN_TotalReport = "报表总计" '------------------------逻辑处理------------------------ Application.ScreenUpdating = False '1.i18n初始化 Sheets("i18n").Select lang = Range("B1").Value Debug.Print "语言选择为" & lang Debug.Print "初始化国际化信息" Sheets("Traveller Anlysis Report").Select If lang = "en_US" Then Range("C1").Value = en_US_TitleMain Range("B2").Value = en_US_TitleMain2 Range("A4").Value = en_US_AccountName Range("C4").Value = en_US_AccountNumber Range("E4").Value = en_US_GenerationDate Range("A6").Value = en_US_Traveler Range("B6").Value = en_US_Class Range("C6").Value = en_US_Routing Range("D6").Value = en_US_DeptDate Range("E6").Value = en_US_TicketNumber Range("F6").Value = en_US_ValueRMB Range("B32").Value = en_US_BottomName Range("C33").Value = en_US_Page Else Range("C1").Value = zh_CN_TitleMain Range("B2").Value = zh_CN_TitleMain2 Range("A4").Value = zh_CN_AccountName Range("C4").Value = zh_CN_AccountNumber Range("E4").Value = zh_CN_GenerationDate Range("A6").Value = zh_CN_Traveler Range("B6").Value = zh_CN_Class Range("C6").Value = zh_CN_Routing Range("D6").Value = zh_CN_DeptDate Range("E6").Value = zh_CN_TicketNumber Range("F6").Value = zh_CN_ValueRMB Range("B32").Value = zh_CN_BottomName Range("C33").Value = zh_CN_Page End If '2.是否增行判断:有效数据行数与预留行数对比 Sheets("data").Select activeNum = Range("A65536").End(xlUp).Row Debug.Print "有效数据行数为" & activeNum totalTraveller = Range("A" & activeNum).Value Debug.Print "差旅人总数为" & totalTraveller If activeNum > limitNum Then Debug.Print "有效数据行数大于预留行数,进行增行操作" insertNum = activeNum - limitNum For num = 1 To insertNum Step 1 Sheets("Traveller Anlysis Report").Select Rows("8:8").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Next num End If '3.数据填充 Debug.Print "增行判断完毕,进行数据填充" '当前正在执行的行数 curNum = startNum '当前正在执行的差旅人 Dim curTravelerID As Integer '标记需要数据条的单元格 Dim needColor() As String Dim colorNum As Integer '循环填充 curTravelerID = 1 colorNum = 1 ReDim needColor(colorNum To totalTraveller) For temp = 1 To activeNum Step 1 Sheets("data").Select travelerID = Range("A" & temp).Value '3.1差旅人是否和上一次的为同一差旅人 If curTravelerID = travelerID Then isSameTraveler = True Else isSameTraveler = False End If curTravelerID = travelerID '3.2判断是否需要添加数据条标记 If isSameTraveler = False Then needColor(colorNum) = "F" & (curNum - 1) colorNum = colorNum + 1 End If '3.3复制差旅人数据 Sheets("Traveller Anlysis Report").Select Range("A" & curNum).FormulaR1C1 = "=data!R[-6]C[1]" If Range("A" & curNum) = 0 Then Range("A" & curNum).Value = "" End If Range("B" & curNum).FormulaR1C1 = "=data!R[-6]C[1]" If Range("B" & curNum) = 0 Then Range("B" & curNum).Value = "" End If Range("C" & curNum).FormulaR1C1 = "=data!R[-6]C[1]" If Range("C" & curNum) = 0 Then Range("C" & curNum).Value = "" End If Range("D" & curNum).FormulaR1C1 = "=data!R[-6]C[1]" If Range("D" & curNum) = 0 Then Range("D" & curNum).Value = "" End If Range("E" & curNum).FormulaR1C1 = "=data!R[-6]C[1]" If Range("E" & curNum) = 0 Then Range("E" & curNum).Value = "" End If Range("F" & curNum).FormulaR1C1 = "=data!R[-6]C[1]" '3.4当前行+1,进入下次循环 curNum = curNum + 1 Next temp '3.5有效数据行的最后一行的最后一列加入needColor needColor(colorNum) = "F" & (curNum - 1) '4.设置样式表 '需要设置的单元格 Dim colorBarCells As String '单元格的总和 Dim colorBarCellsSum As Long For i = 1 To UBound(needColor) colorBarCells = colorBarCells + needColor(i) + "," colorBarCellsSum = colorBarCellsSum + Range(needColor(i)).Value Next i colorBarCells = Mid(colorBarCells, 1, Len(colorBarCells) - 1) Debug.Print "待添加渐变单元格:" & colorBarCells Debug.Print "待添加渐变单元格的总和:" & colorBarCellsSum Sheets("Traveller Anlysis Report").Select Range(colorBarCells).Select Selection.FormatConditions.AddDatabar Selection.FormatConditions(Selection.FormatConditions.Count).ShowValue = True Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 'With Selection.FormatConditions(1) ' .MinPoint.Modify newtype:=xlConditionValueLowestValue ' .MaxPoint.Modify newtype:=xlConditionValueHighestValue ' End With With Selection.FormatConditions(1).BarColor .Color = 8700771 .TintAndShade = 0 End With '5.设置统计栏 Sheets("Traveller Anlysis Report").Select Range("A" & curNum).Select If lang = "en_US" Then Range("A" & curNum) = en_US_TotalReport Else Range("A" & curNum) = zh_CN_TotalReport End If Selection.Font.Bold = True Range("F" & curNum).Select Range("F" & curNum) = colorBarCellsSum Selection.Font.Bold = True Range("A" & curNum & ":" & "F" & curNum).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone Selection.Borders(xlEdgeLeft).LineStyle = xlNone With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ColorIndex = 0 .TintAndShade = 0 .Weight = xlThin End With Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone Range("A65000").Select Application.ScreenUpdating = True End Sub
特别注意的是注释那段,当关闭excel后会报告excel格式错误问题,但手动操作的没问题,非常怪异,特此标记一下。
VBA代码可以进一步进行优化,不过在那里面写真的是没eclipse方便...
另外经常写到循环或者判断的时候,打进去的代码居然是JAVA代码,悲催啊...
丫的,突然想起来这货不是JAVA啊~~~
发表评论
-
ActiveMQ集群应用
2013-03-30 21:29 7173ActiveMQ集群 ActiveMQ具有 ... -
清除SVN控制
2013-03-06 13:59 919新建一个名为clearSvn.bat, copy以下内容: ... -
memcached做Session同步时失败的问题
2013-02-21 14:00 5258本地搭建了一个nginx+两台tomcat+memcache ... -
让自己的电脑变成虚拟服务器
2013-02-20 11:32 1973自己开发了博客系统?小webapp? 不想买域名买空间怎么 ... -
Tibco时间同步处理机制
2013-02-20 11:28 882记住最主要一句话:Tibco Queue EMS会每次建立 ... -
nginx配置
2013-02-20 11:22 1323#user nobody; worker_proc ... -
Nginx动静分离经典案例配置
2013-02-20 11:20 47954随着Nginx高性能Web服务器大量被使用,目前Nginx最 ... -
诡异的tomcat发布应用问题
2013-02-19 13:44 1059tomcat发布有好几种方式,耳熟能详。其中,这些方式对于m ... -
JVM内存模型与性能调优
2013-02-18 14:16 1256Java是一门面向对象的 ... -
Web容器线程池机制小议
2013-02-16 11:17 5442基础 从刚开始学习java ... -
JDBC DB TableName
2012-12-10 17:27 1194获取表结构. package com.pear.db; ... -
intellij idea 使用总结,java
2012-12-10 15:14 1736intellij idea 使用总结 Int ... -
并发测试程序
2012-12-10 14:40 1112package com.thread.test; i ... -
IntelliJ Idea 常用快捷键列表
2012-11-12 15:07 1129Alt+回车 导入包,自动修 ... -
sigar简单使用
2012-07-17 13:58 5653import java.io.File; import ... -
jackson如何做国际化
2012-07-16 17:44 1573JSON目前在JAVA中用的已经比较多了,像Json-lib、 ...
相关推荐
学习 Business Objects ,以及 reporting service 的笔记。
一些SWT开发过程中碰到的需要注意的问题
自动点滴管理系统(.NET 3.5框架的WCF技术实现)
as/400系统开发工具及开发语言很多,有许多技术性的东西并不是我们能经常碰到的,但这些东西在一些实际应用中很有用处。本人在几年as/400系统上的开发中,也有一些经验。有些东西如果不把其形成文字,过一段时间后,...
基于.NET前沿技术WCF技术开发HIS自动点滴管理系统实战项目,一共38讲。
.NET C/S(WinForm)开发技巧点滴 数据绑定,数据导出到 Excel,防止子窗口重复打开,确保某一子窗口只打开一次,使用枚举 enum 区分类同信息,在ToolStrip中加入其它WinForm控件。
EXCEL数据统计折线图变形解决方法【分享工作点滴】
1、无线通信项目开发 – NB-IOT、LoRa、433、GPRS、2.4G、PKE近场通信,基础理论与开发点滴总结 2、蓝牙无线技术(BLE)与开发点滴总结 3、Zigbee无线技术与开发点滴总结 4、WIFI无线技术与开发点滴总结 文章目录...
点滴\液体点滴速度监控装置设计报告 点滴\液体点滴速度监控装置设计报告
液体点滴速度监控装置 液体点滴速度监控装置
AS/400系统开发工具及开发语言很多,有许多技术性的东西并不是我们能经常碰到的,但这些东西在一些实际应用中很有用处。本人在几年AS/400系统上的开发中,也有一些经验。有些东西如果不把其形成文字,过一段时间后,...
系统通过RS232串行通信总线,根据自定协议,实现了可由一个主站控制多个从站的液体点滴速度检测装置。主站可定点、巡回检测或设定所有从站点滴速度,声光报警并显示报警从站号;从站根据红外对管测得的点滴速度使...
自动点滴管理系统完整源代码。实现客户端的呼叫,开始注射,结束注射。服务端实现调整速率,信息监听等功能。采用Wcf通信技术。
单片机开发0082、液体点滴速度监控装置资料.zip
2、新增文件doc、excel在线预览功能 3、更改数据统计中按照权限查看公司员工的客户、合同等数据统计 4、其他问题的优化、修正。 云点滴客户关系管理CRM简要介绍: 云点滴客户解决方案是针对中小企业量身制定的...
一、程序简介 云 点滴客户解决方案是针对中小企业量身制定的具有简单易用、功能强大、永久免费使用、终身升级维护的智能化客户解决方案。依托功能强大、安全稳定的阿里云平 台,性价比高、扩展性好、安全性高、稳定...
C语言点滴
医用的自动点滴控制器论文。非常的全,而且符有实物图!
自动点滴管理系统(.NET 3.5框架的WCF技术实现)