知识大全 在SWT中使用OLE操纵Excel(二)
Posted 知
篇首语:拍照的好处,是可以在人生微凉时,用回忆取暖。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在SWT中使用OLE操纵Excel(二)相关的知识,希望对你有一定的参考价值。
在SWT中使用OLE操纵Excel(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
为Excel的A 单元格赋值
代码
package jrkui example excel;import java io File;import eclipse swt SWT;import eclipse swt layout FillLayout;import eclipse swt ole win OLE;import eclipse swt ole win OleAutomation;import eclipse swt ole win OleClientSite;import eclipse swt ole win OleFrame;import eclipse swt ole win Variant;import eclipse swt program Program;import eclipse swt widgets Display;import eclipse swt widgets Menu;import eclipse swt widgets Shell;public class ExcelShell public static void main(String[] args) new ExcelShell() open(); public void open() Display display = Display getDefault(); Shell shell = new Shell(); shell setSize( ); shell setText( Excel Window ); shell setLayout(new FillLayout()); //使Excel的菜单栏显示 shell setMenuBar(new Menu(shell SWT BAR)); createExcelPart(shell); shell open(); while(!shell isDisposed()) if(!display readAndDispatch()) display sleep(); display close(); /** * 使Excel嵌入到shell中 * @param shell */ private void createExcelPart(Shell shell) //OleFrame实际上是一个Composite 用于放置OLE控件 OleFrame oleFrame = new OleFrame(shell SWT NONE); //OleClientSite提供一个场所用于把OLE对象嵌入到容器中 在这里 Excel Sheet 表示的OLE对象是Excel OleClientSite clientSite = new OleClientSite(oleFrame SWT NONE Excel Sheet ); setValueForA Cell(clientSite); //OleClientSite在显示OLE对象时所做的动作 这里的动作是OLEIVERB_SHOW 显示 clientSite doVerb(OLE OLEIVERB_SHOW); /** * Sheet的Id */ private static final int SHEET_ID = x e ; /** * 单元格的Id */ private static final int CELL_ID = x c ; /** * 单元格值的Id */ private static final int CELL_VALUE_ID = x ; /** * 为第一个Sheet页的A 单元格赋值 * @param clientSite */ private void setValueForA Cell(OleClientSite clientSite) //获得Excel的workbook对象 OleAutomation workbook = new OleAutomation(clientSite); //获得workbook的第一个Sheet页 OleAutomation sheet = workbook getProperty(SHEET_ID new Variant[]new Variant( )) getAutomation(); //获得Sheet页的A 单元格 Variant cellA Variant = sheet getProperty(CELL_ID new Variant[]new Variant( A )); OleAutomation cellA = cellA Variant getAutomation(); //为A 单元格赋值 cellA setProperty(CELL_VALUE_ID new Variant( Hello OLE! )); //获得A 单元格的值并输出到控制台上 System out println(cellA Variant getString());
显示效果
控制台输出 Hello OLE!
解释
<! [if !supportLists] >l <! [endif] >原理
<! [if !supportLists] >Ø <! [endif] >使用SWT进行OLE操作时 所有的对OLE对象的引用都是通过OlE定义的Id获得 获得各个对象的Id方法稍后会进行说明
<! [if !supportLists] >Ø <! [endif] >所有的动作都通过OleAutomation对象进行 OleAutomation可以代表任一OLE对象 如Workbook Worksheet Range 可以通过getProperty()方法获得它的属性 也可以用setProperty()方法为它的属性赋值
<! [if !supportLists] >Ø <! [endif] >Variant对象一般是封装了OLE对象的值 可以通过它进行值传入及获得相应的值 也可以通过它获得OleAutomation对象
<! [if !supportLists] >Ø <! [endif] >如果想对单元格进行操作(如 赋值 取值) 则
<! [if !supportLists] >ü <! [endif] >首先要取得Workbook的引用
OleAutomation workbook = new OleAutomation(clientSite);
在这里OleClientSite对象就代表着Workbook对象 需要把OleClientSite转换成OleAutomation对象以便进行下一步动作
<! [if !supportLists] >ü <! [endif] >然后需要获得第一个Sheet页的引用
OleAutomation sheet = workbook getProperty(SHEET_ID new Variant[]new Variant( )) getAutomation();
需要知道Worksheet的Id( x e ) 因为在OLE中获得Worksheet的方法是的返回值是一个数组 所以需要传入一个参数 表示数组的第一个元素 在这里参数 是通 过new Variant[]new Variant( )传入的
<! [if !supportLists] >ü <! [endif] >获得A 单元格的引用
Variant cellA Variant = sheet getProperty(CELL_ID new Variant[]new Variant( A ));OleAutomation cellA = cellA Variant getAutomation();
在OLE中代表单元格的是Range 范围 可以表示一个单元格也可以表示一个单元格区域 实际上一个单元格就是一个特殊的Range Range的Id是 x c Range是通过Worksheet 获得的 需要传入的参数为字符串(用Variant进行包装) 可以为一个(代表一个单元格 如new Variant[]new Variant( A )) 也可以为两个(代表一个单元格区域 如new Variant[]new Variant( A ) new Variant( D )) 因为我们要对单元格进行赋值 所以需要获得Range的OleAutomation对象
<! [if !supportLists] >ü <! [endif] >为A 单元格赋值
cellA setProperty(CELL_VALUE_ID new Variant( Hello OLE! ));
Range的值(Value)的属性的Id是 x 在这里传入一个字符串作为单元格的值
<! [if !supportLists] >ü <! [endif] >获得A 单元格的值
System out println(cellA Variant getString());
取值的动作需要通过Variant对象进行 所以获得A 单元格的值就需要通过cellA Variant对象
<! [if !supportLists] >l <! [endif] >获得OLE对象的Id
<! [if !supportLists] >Ø <! [endif] >微软提供一个工具OleView exe 可列出当前机器上的所有类别信息 以及每一种类别下的组件对象列表 这个工具貌似可以从VS或VC上获得 如果没有这个工具的话也可以上网下 我下的版本在使用的时候少了一个dll库 这个也可以上网去下
<! [if !supportLists] >Ø <! [endif] >查找Excel的Id
Excel的Id在Document ObjectsàMicrosoft Excel WorkSheet项里 选中这一项可以看到有一些tab页 其中在Registry tab页中记录了该项的详细休息 一项项找 可以发现Excel在我的机子上的Id是Excel Sheet (VersionIndependentProgID = Excel Sheet) 通过这个Id就可以使用new OleClientSite(oleFrame SWT NONE Excel Sheet )这个方法获得Excel的引用了
<! [if !supportLists] >Ø <! [endif] >查找Excel组件下的对象(如 WorkSheet Range)需要打开另一个窗口ITypeLib Viewer
右键点击Microsoft Excel WorkSheetà选择View Type Information…
<! [if !supportLists] >Ø <! [endif] >获得WorkSheet(因为这个工具没有查找的功能 所以找起来有点费劲 点击Toolbar上的第二个按钮可以进行分类)
因为WorkSheet是通过Workbook获得的(是它的一个属性) 而Workbook已经通过OleAutomation workbook = new OleAutomation(clientSite)方法获得了 所以这时候我们查找WorkSheet要在Workbook中找
<! [if !supportLists] >ü <! [endif] >找到dispinterface _Workbooks (注意 有下划线 如果使用了分类功能 在Dispinterfaces节点下)
<! [if !supportLists] >ü <! [endif] >打开Methods节点(Methods 顾名思义 表示该对象的所有方法的集合)
<! [if !supportLists] >ü <! [endif] >在众多Method中找到Sheets
可以在右边的信息框中知道 这个方法是获得一组Sheets(WorkSheet) 其id是 x e 是一个proget类型的方法(get类型) 帮助文档的id是 x e (一般用不上) 方法描述是Sheets* Sheets(); 没有参数
<! [if !supportLists] >Ø <! [endif] >获得单元格也是同样的道理
<! [if !supportLists] >ü <! [endif] >找到dispinterface _Worksheet
<! [if !supportLists] >ü <! [endif] >找到MethodsàRange 得知 这个方法是获得一组Range对象 是一个是一个proget类型的方法(get类型) 方法描述是Range* Range([in] VARIANT Cell [in optional] VARIANT Cell ) 这里的 in 表示传入的参数 optional 表示这个参数是可选的 即可要可不要
<! [if !supportLists] >ü <! [endif] >传入的参数以单元格的location表示(如 A D E ) 一个参数表示一个单元格 两个参数表示两个参数代表的单元格区域(如 A * D )
<! [if !supportLists] >Ø <! [endif] >查找单元格的Value的属性
<! [if !supportLists] >ü <! [endif] >找到dispinterface Range
<! [if !supportLists] >ü <! [endif] >找到MethodsàValue 这里会发现有两个Value 实际上它们的Id都是一样 但是代表不同的意思 一个是获得Range的Value属性(proget) 一个是为Range的Value属性赋值(propput)
<! [if !supportLists] >ü <! [endif] >为Value属性赋值 方法描述是void Value([in optional] VARIANT RangeValueDataType [in] VARIANT rhs)
<! [if !supportLists] >ü <! [endif] >获得Value属性的值 方法描述是VARIANT Value([in optional] VARIANT RangeValueDataType)
cha138/Article/program/Java/hx/201311/26720相关参考
在PB中用OLE存取blob类型数据(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 处理b
知识大全 在ASP中利用Oracle Object for OLE访问Oracle 8
在ASP中利用OracleObjectforOLE访问Oracle8 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
在Eclipse中使用SWT进行界面设计 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为什么要
在Java中使用Draw2D和SWT绘图 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用Jav
一、车辆行驶中感觉手发麻。当车辆在正常行驶时,底盘出现周期性的响声或方向盘强烈振动,导致驾驶员感觉手发麻。主要原因是由于方向传动装置平衡被破坏,传动轴及其花键套磨损过度引起的。二、方向盘难于操纵。在车
一、车辆行驶中感觉手发麻。当车辆在正常行驶时,底盘出现周期性的响声或方向盘强烈振动,导致驾驶员感觉手发麻。主要原因是由于方向传动装置平衡被破坏,传动轴及其花键套磨损过度引起的。二、方向盘难于操纵。在车
在PB中用OLE存取blob类型数据(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前言
在PB中用OLE存取blob类型数据(三) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 源程序
使用OLE对象访问Oracle数据库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! OLE即对象
Eclipse开发经典教程:SWT事件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在窗口系统中程