一、在
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
作者Blog:
http://blog.csdn.net/venus0314/
转自: