一、在VB中使用OWC组件
引用Office Web Component组件到项目中(ProjectàComponents)
选择Microsoft Office Web Components 11.0,点击应用将会在工具栏中出现五个组件,
分别为ChartSpace、SpreadSheet、DataSourceControl、RecordNevigationControl、PivotTable。本文档仅就SpreadSheet的相关操作进行说明,其余请参考《Microsoft Office Web组件Visual Basic参考》。
二、通过可视化配置设定OWC的呈现效果及相关属性
可以通过设定命令和选项来更改OWC呈现的相关设置(在SpreadSheet上点击右键调出)
通过设定格式、工作表、工作簿等选项,将OWC的SpreadSheet显示格式设定为如下图所示样式,其中列表头是不显示的,采用第一列充当表头,并且锁定第一行的区域,使得表头可以始终呈现给用户(实现该步骤,只需要将鼠标选中第二行,并设定格式中的单元格à锁定,如上图所示小锁头符号)。
还需要在属性设定中设定其是否显示TitleBar、ToolBar、OfficeLogo等。
附1:
要实现类Grid效果,则应不允许插入列、删除列等。可以设定保护得到效果。
不过,不建议在设计时就做保护的设定。因为程序运行过程中会对SpreadSheet做数据填充或呈现样式修改等动作,就必须先要取消SpreadSheet的保护效果,在代码上有些冗余。所以建议在运行中动态调整保护的选项,可以通过SpreadSheet.ActiveSheet.Protect()方法设定。
附2:
如何设定单元格的值类型?
方法一、可以通过设定格式中的数字格式设定一列或某单元格的值类型。
方法二、代码实现,可以在Excel中录制宏得到VBS代码
''@ means Text ; '0.00000_ ' means numeric ; '0_ ' means integer
Me.xlSpreadsheet.ActiveSheet.Range("A:B").NumberFormat = "@"
Me.xlSpreadsheet.ActiveSheet.Range("C:C").NumberFormat = "0.00000_ "
Me.xlSpreadsheet.ActiveSheet.Range("D:K").NumberFormat = "@"
Me.xlSpreadsheet.ActiveSheet.Range("L:N").NumberFormat = "0_ "
|
注意:0_后面还有一个空格,这个是不可少的。
附3:
第一行作为Title,则Title不允许在运行时被User修改,所以需要Lock该行,可以通过设计时设定,也可以在运行时动态控制
''''Lock the Title, can not be modified
xlSpreadsheet.ActiveSheet.Range("A1:B1").Locked = True
|
三、呈现数据、读取数据、更改呈现样式等操作方式
1:呈现数据
SpreadSheet的数据来源可以有三种,分别为CSV Data、XML、Html,分别对应方法为CSVData/CSVURL、XMLData/XMLURL、HTMLData/HTMLURL。不过这仅限于比较规则的二维表结构的数据。
一般的还是采用逐行设定值的方式。
xlSpreadsheet.ActiveSheet.Cells(intRowCounter, intColCounter).Value
|
注意:不管采用哪种方式,都需要先将SpreadSheet锁定区域解锁,才能将值设定上去。
2:读取数据
从SpreadSheet上读取数据的方式与呈现数据方式类似,直接采用逐行逐列方式读取。
3:更改呈现样式
SpreadSheet的样式设定非常灵活,可以设定一行、一列、多行、多列、选定单元格等的样式。其动态设定方式分别为如下所示:
''''设定一列的背景颜色,可以通过下面几种方式
xlSpreadsheet.ActiveSheet.Columns(1).Interior.Color = vbRed 或
xlSpreadsheet.ActiveSheet.Columns(1).Interior.ColorIndex = 10 或
xlSpreadsheet.ActiveSheet.Range("A:A").Interior.Color = vbRed 或
''''设定一列的字体颜色,可以通过下面几种方式
xlSpreadsheet.ActiveSheet.Columns(1).Font.Color = vbRed 或
xlSpreadsheet.ActiveSheet.Columns(1).Font.ColorIndex = 10 或
xlSpreadsheet.ActiveSheet.Range("A:A").Font.Color = vbRed
''''设定一行的背景、字体颜色,可以通过下面几种方式
xlSpreadsheet.ActiveSheet.Rows(1).Interior.Color = vbRed 或
xlSpreadsheet.ActiveSheet.Rows(1).Interior.ColorIndex = 10
xlSpreadsheet.ActiveSheet.Rows(1).Font.Color = vbRed 或
xlSpreadsheet.ActiveSheet.Rows(1).Font.ColorIndex = 10
''''设定多行或多列的背景、字体颜色,类似
''''设定选定单元格的背景、字体颜色,如下
xlSpreadsheet.ActiveCell.Interior.Color = vbRed 或
xlSpreadsheet.ActiveCell.Interior.ColorIndex = 10
xlSpreadsheet.ActiveSheet.Cells(1,1).Interior.Color = vbRed
''''设定一列隐藏
xlSpreadsheet.ActiveSheet.Columns(1).Hidden = True
|
四、事件的组合使用、数据有效性Check
要使用OWC中的Events,首先必须开启Events功能。可以在属性窗口中将EnableEvents更改为True即可(默认也是True)。
1:CommandBeforeExecute
在执行一个Command之前发生。如在执行删除行之前需要判断是否选中了多行,则可以在该事件中判断Selection.Rows.Count并做相应的处理。
此事件中可以拦截SpreadSheetCommandID中所有的Command事件。
2:CommandExecute
在执行一个Command时发生。如粘贴时做相应的查询动作,则可以捕获CommandID为ssCommandCopy的Command,并根据数据做相应的处理。
此事件中可以拦截SpreadSheetCommandID中所有的Command事件。
3:StartEdit
在单元格开始进入编辑状态时发生。
4:EndEdit
在单元格编辑完成之后发生,不管单元格内的数据有没有做更新,都会发生。其中FinalValue代表编辑之后的值,之前的值可以通过Cell读取。
可以在此事件中做相应的查询处理,类似粘贴时的动作。
5:DblClick
在双击SpreadSheet时发生。可以将SpreadSheet的选定单元格置于Edit状态。
6:BeforeKeyPress
在单元格的KeyPress事件之前发生。可在此事件中针对不同Column进行数据的Check。
如第1列只允许输入Double型数据,则可以通过xlSpreadsheet.ActiveCell.Column获取当前编辑的列。然后判断KeyAscii的范围进行相应处理。
If (KeyAscii < Asc("0") Or KeyAscii > Asc("9")) And _
KeyAscii <> vbKeyBack And KeyAscii <> Asc(".") Then
Cancel.Value = 1
End If
|
7:BeforeContextMenu
在显示上下文菜单之前发生。可以在此事件中屏蔽SpreadSheet原有的菜单,也可以设定自定义的上下文呢菜单。
五、与Excel的互操作
在VB中提供Excel下载、上传功能,可以采用OWC和Excel的一些相似操作提高性能和简化操作的复杂性。
1:Export To Excel
将OWC SpreadSheet中的有效数据Export到Excel中,可以采用如下两种方式:
a)、SpreadSheet.Exports方法的使用
SpreadSheet带有的方法Exports可以将SpreadSheet中的数据和格式统统导出成Excel。不过此时生成的Excel不是二进制编码的文件,而是XML编码的文件。一定程度上带有局限性。
b)、Copy And Paste
可以将SpreadSheet的有效区域选中,
SpreadSheet.ActiceSheet.UsedRange.Rows.Count将返回有效行数;
SpreadSheet.ActiceSheet.UsedRange.Columns.Count将返回有效列数(一般列数固定)。
Spreadsheet.Range("A1:S" & 有效行).Copy
Excel.WorkBooks(1).WorkSheets(1).Paste
附录:
附一、OWC SpreadSheet useful command list
SpreadSheetCommandId
|
||
Command ID
|
Command Name
|
Description
|
1000
|
ssCommandUndo
|
撤销
|
1001
|
ssCommandCut
|
剪切
|
1002
|
ssCommandCopy
|
复制
|
1003
|
ssCommandPaste
|
粘贴
|
|
|
|
10006
|
ssCommandDeleteRows
|
删除行(一行或多行)
|
10007
|
ssCommandDeleteCols
|
删除列(一列或多列)
|
10008
|
ssCommandInsertRows
|
插入行(一行或多行)
|
10009
|
ssCommandInsertCols
|
插入列(一列或多列)
|
|
|
|
10011
|
ssCommandSelectRow
|
选择一行
|
10012
|
ssCommandSelectCol
|
选择一列
|
10013
|
ssCommandSelectAll
|
选中Sheet中的全部内容
|
|
||
这里仅枚举出常用的Command,对于其他的参数,请参考《Microsoft Office Web组件Visual Basic参考》中的枚举—〉SpreadSheetCommandID
|
附二、OWC SpreadSheet Objects
转自: