VB操作Excel读取写入打印代码
VB操作Excel读取写入打印代码
1】定义EXCEL的一系列操作
Dim xlApp As Excel.Application
Dim ExcelShowStr As String
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = true
AppLogFile.WriteLine (CStr(Date) & "_" & CStr(Time) & ":Set xlApp=new Excel.Application") Dim xlBook As Workbook
Dim xlSheet As Worksheet
Dim xlrow, sheetIndex, sheetColumn As Integer
'fileurl ="D:\VB英迈\Template\WriteData.xls" Editable=空值
Set xlBook = xlApp.Workbooks.Open(fileUrl, Editable) '打开EXCEL模板
Set xlSheet = xlApp.ActiveSheet
--------------------------------------------------------------------------------------------
【2】写入数据的操作
xlSheet.Range(xlSheet.Cells(beginRow, 1), xlSheet.Cells(endRow - 1, 1)).Merge '合并单元格xlSheet.Cells(beginRow, 1).FormulaR1C1 = CustName '单行插入
xlSheet.Cells(beginRow, 1).VerticalAlignment = xlTop '垂直,写入数据的位置,这里为高xlSheet.Cells(beginRow, 2).HorizontalAlignment = xlHAlignCenter '水平写入数据的位置,这里为居中
xlSheet.Range(xlSheet.Cells(beginRow, 1), xlSheet.Cells(endRow - 1, 19)).Font.ColorIndex = ConstModule.COLOR_BLUE '单元格的字体颜色
xlSheet.Range(xlSheet.Cells(beginRow, 1), xlSheet.Cells(endRow - 1, 19)).Font.Bold = True '单元格的数据为粗体显示
xlSheet.Range(xlSheet.Cells(beginRow, 1), xlSheet.Cells(endRow - 1, 19)).Interior.ColorIndex = ConstModule.COLOR_SILVER '单元格的背景颜色
定义数组,一次性写入,列子如下:
If DetailRes.RecordCount > 0 Then
DetailRes.MoveFirst
For row2 = 0 To DetailRes.RecordCount - 1
Dim arrayProduct(50, 17) As String
arrayProduct(row2, 0) = DetailRes.Fields("Product")
arrayProduct(row2, 1) = DetailRes.Fields("rev")
arrayProduct(row2, 2) = DetailRes.Fields("sagm")
arrayProduct(row2, 3) = DetailRes.Fields("sagm_per") & "%"
arrayProduct(row2, 4) = DetailRes.Fields("gp")
arrayProduct(row2, 5) = DetailRes.Fields("gp_per") & "%"
arrayProduct(row2, 6) = DetailRes.Fields("opex")
arrayProduct(row2, 7) = DetailRes.Fields("opex_per") & "%"
arrayProduct(row2, 8) = DetailRes.Fields("oper_profit")
arrayProduct(row2, 9) = DetailRes.Fields("oper_profit_per") & "%"
arrayProduct(row2, 10) = DetailRes.Fields("dio")
arrayProduct(row2, 11) = DetailRes.Fields("dpo")
arrayProduct(row2, 12) = DetailRes.Fields("dso")
arrayProduct(row2, 13) = DetailRes.Fields("working_capital")
arrayProduct(row2, 14) = DetailRes.Fields("interests")
arrayProduct(row2, 15) = DetailRes.Fields("pre_tax_income")
arrayProduct(row2, 16) = DetailRes.Fields("roic") & "%"
DetailRes.MoveNext
Next row2
xlSheet.Range(xlSheet.Cells(beginRow, 3), xlSheet.Cells(endRow - 1, 19)) = arrayProduct() '数组显示
--------------------------------------------------------------------------------------------
【3-重点】vb操作EXCEL实现数据组合
现在需要把单元格1-4行进行数据组合
在EXCEL中,只要选中单元格1-4行,在
点击菜单> > 数据> > 组及分级显示> > 组合即可达到要求!
[注]:若组合时,收缩时数据显示的是最后的那条,
在EXCEL文件中,点击数据>> 组及分级显示>> 设置>>
(1)把明细数据的下方复选框的选中状态改为不选中
(2)把明细数据的右侧复选框的选中状态改为不选中
这样设置数据即可达到显示要求
vb代码如下:Rows("10:15").Select
Selection.Rows.Group
若是需要变量传入,则:Rows(beginRow & ":" & endRow - 1).Select
Selection.Rows.Group
VB操作EXCEL,实现数据读取
1、定义Excel操作变量
Dim objExcelFile As Excel.Application
Dim objWorkBook As Excel.Workbook
Dim objImportSheet As Excel.Worksheet
2、打开Excel进程,并打开目标Excel文件
Set objExcelFile = New Excel.Application
objExcelFile.DisplayAlerts = False
Set objWorkBook = objExcelFile.Workbooks.Open(strFileName)
Set objImportSheet = objWorkBook.Sheets(1)
3、获取Excel有效区域的行和列数
intLastColNum = https://www.360docs.net/doc/a116960234.html,edRange.Columns.Count
intLastRowNum = https://www.360docs.net/doc/a116960234.html,edRange.Rows.Count
4、逐行读取Excel中数据
由于前两行为Header部分,所以需要从第三行读取
如果第1到第10个单元格的值均为空或空格,则视为空行
For intCountI = 3 To intLastRowNum
''Check if Empty Data Row
blnNullRow = True
For intI = 1 To 10
If Trim$(objImportSheet.Cells(intCountI, intI).Value) <> "" Then
blnNullRow = False
End If
Next intI
若不是空行,则进行读取动作,否则继续向后遍历Excel中的行
If blnNullRow = False Then
获取单元格中的数据,做有效性Check,并将合法数据创建为实体存入对象数组中objImportSheet.Cells(intCountI, 1).Value
……
End If
Next intCountI
5、退出Excel进程,并关闭Excel相关操作对象
objExcelFile.Quit
Set objWorkBook = Nothing
Set objImportSheet = Nothing
Set objExcelFile = Nothing
基于VB和EXCEL的报表设计及打印
在现代管理信息系统的开发中,经常涉及到数据信息的分析、加工,最终还需把统计结果形成各种形式的报表提供给领导决策参考,或进行外部交流。在VisualBasic中制作报表,通常是用数据环境设计器(Data EnvironmentDesigner)与数据报表设计器(DataReportDesigner),或者使用第三方产品来完成。但对于大多数习惯于Excel报表的用户而言,用以上方法生成的报表在格式和功能等方面往往不能满足他们的要求。
由于Excel具有自己的对象库,在VisualBasic工程中可以加以引用,通过对Excel使用OLE 自动化,可以创建一些外观整洁的报表,然后打印输出。这样实现了VisualBasi应用程序对Excel的控制。本文将针对一个具体实例,阐述基于VB和EXCEL的报表设计及打印过程。1)创建Excel对象
Excel对象模型包括了128个不同的对象,从矩形、文本框等简单的对象到透视表,图表等复杂的对象。下面简单介绍一下其中最重要,也是用得最多的五个对象。
(1)Application对象
Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。
(2)Workbook对象
Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。
(3)Worksheet对象
Worksheet对象包含于Workbook对象,表示一个Excel工作表。
(4)Range对象
Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。
(5)Cells对象
Cells对象包含于Worksheet对象,表示Excel工作表中的一个单元格。如果要启动一个Excel,使用Workbook和Worksheet对象,下面的代码启动了Excel并创建了一个新的包含一个工
作表的工作薄:
Dim zsbexcel As Excel.Application
Set zsbexcel=NewExcel.Application
zsbexcel.Visible=True
如要Excel不可见,可使zsbexcel.Visible=False
zsbexcel.SheetsInNewWorkbook=1
Set zsbworkbook=zsbexcel.Workbooks.Add
2)设置单元格和区域值
要设置一张工作表中每个单元格的值,可以使用Worksheet对象的Range属性或Cells属性。With zsbexcel.ActiveSheet
.Cells(1,2).Value="100"
.Cells(2,2).Value="200"
.Cells(3,2).Value="=SUM(B1:B2)"
.Range("A3:A9")="中国人民解放军"
End With
要设置单元格或区域的字体、边框,可以利用Range对象或Cells对象的Borders属性和Font 属性:
With objexcel.ActiveSheet.Range("A2:K9").Borders'边框设置
.LineStyle=xlBorderLineStyleContinuous
.Weight=xlThin
.ColorIndex=1
End With
With objexcel.ActiveSheet.Range("A3:K9").Font'字体设置
.Size=14
.Bold=True
.Italic=True
.ColorIndex=3
End With
通过对Excel单元格和区域值的各种设置的深入了解,可以创建各种复杂、美观、满足需要的、具有自己特点的报表。
3)预览及打印
生成所需要的工作表后,就可以对EXCEL发出预览、打印指令了。
zsbexcel.ActiveSheet.PageSetup.Orientation=xlPortrait'
设置打印方向
zsbexcel.ActiveSheet.PageSetup.PaperSize=xlPaperA4'
设置打印纸的打下
zsbexcel.Caption="打印预览"'设置预览窗口的
标题
zsbexcel.ActiveSheet.PrintPreview'打印预览
zsbexcel.ActiveSheet.PrintOut'打印输出
通过打印方向、打印纸张大小的设置,不断进行预览,直到满意为止,
最终进行打印输出。
为了在退出应用程序后EXCEL不提示用户是否保存已修改的文件,需使用如下语句:
zsbexcel.DisplayAlerts=False
zsbexcel.Quit'退出EXCEL
zsbexcel.DisplayAlerts=True
如此设计的报表打印是通过EXCEL程序来后台实现的。对于使用者来说,根本看不到具体过程,只看到一张张漂亮的报表轻易地被打印出来了。
4)具体实例
下面给出一个具体实例,它在window98、Visual Basic6.0、Microsoft Office97的环境下调试通过。
在VB中启动一个新的StandardEXE工程,在“工程”菜单的“引用”
选项下引用Excel ObjectLibrary然后在Form中添加一个命令按钮
cmdExcel最后在窗体中输入如下代码:
Dim zsbexcel As Excel.Application
Private Sub cmdExcel_Click()
Set zsbexcel=NewExcel.Application
zsbexcel.Visible=True
zsbexcel.SheetsInNewWorkbook=1
Setzsbworkbook=zsbexcel.Workbooks.Add
With zsbexcel.ActiveSheet.Range("A2:C9").Borders'边框设置
.LineStyle=xlBorderLineStyleContinuous
.Weight=xlThin
.ColorIndex=1
End With
With zsbexcel.ActiveSheet.Range("A3:C9").Font'字体设置
.Size=14
.Bold=True
.Italic=True
.ColorIndex=3
End With
zsbexcel.ActiveSheet.Rows.HorizontalAlignment=xlV AlignCenter'水平居中
zsbexcel.ActiveSheet.Rows.VerticalAlignment=xlV AlignCenter'垂直居中
With zsbexcel.ActiveSheet
.Cells(1,2).Value="100"
.Cells(2,2).Value="200"
.Cells(3,2).Value="=SUM(B1:B2)"
.Cells(1,3).Value="中国人民解放军"
.Range("A3:A9")="50"
End With
zsbexcel.ActiveSheet.PageSetup.Orientation=xlPortrait' xlLandscape
zsbexcel.ActiveSheet.PageSetup.PaperSize=xlPaperA4 zsbexcel.ActiveSheet.PrintOut
zsbexcel.DisplayAlerts=False
zsbexcel.Quit
zsbexcel.DisplayAlerts=True
Set zsbexcel=Nothing