知识大全 在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类型数据(二)

在PB中用OLE存取blob类型数据(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  处理b

知识大全 在ASP中利用Oracle Object for OLE访问Oracle 8

在ASP中利用OracleObjectforOLE访问Oracle8  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 在Eclipse中使用SWT进行界面设计

在Eclipse中使用SWT进行界面设计  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为什么要

知识大全 在Java中使用Draw2D和SWT绘图

在Java中使用Draw2D和SWT绘图  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  用Jav

方向盘操纵异常的原因

一、车辆行驶中感觉手发麻。当车辆在正常行驶时,底盘出现周期性的响声或方向盘强烈振动,导致驾驶员感觉手发麻。主要原因是由于方向传动装置平衡被破坏,传动轴及其花键套磨损过度引起的。二、方向盘难于操纵。在车

方向盘操纵异常的原因

一、车辆行驶中感觉手发麻。当车辆在正常行驶时,底盘出现周期性的响声或方向盘强烈振动,导致驾驶员感觉手发麻。主要原因是由于方向传动装置平衡被破坏,传动轴及其花键套磨损过度引起的。二、方向盘难于操纵。在车

知识大全 在PB中用OLE存取blob类型数据(一)

在PB中用OLE存取blob类型数据(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前言 

知识大全 在PB中用OLE存取blob类型数据(三)

在PB中用OLE存取blob类型数据(三)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  源程序

知识大全 使用OLE对象访问Oracle数据库

使用OLE对象访问Oracle数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  OLE即对象

知识大全 SWT事件

Eclipse开发经典教程:SWT事件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在窗口系统中程