OpenOffice Calc开发(C++) 7 一个例子的代码详解
来源:互联网 发布:mathematica 人工智能 编辑:程序博客网 时间:2024/04/30 00:01
前面我们看到了一个生成电子表格的例子,下面我们就来详细查看其中代码的含义
int main()
{
if(FindInstallAndSetPath() != ERROR_SUCCESS)
{
return -1;
}
这个函数FindInstallAndSetPath()必须在一开始的时候执行,它的作用我在前面也说过,就是设置OpenOffice的环境以及实现能够延迟加载一些必须的.dll文件。它的实现你不用关心,你只需要把它的定义从前面我们下载的atlOOo.h文件里拷过来就好了,注意作者的版权声明。
Reference<XComponentContext> xContext;
Reference<XMultiComponentFactory> xMSFactory;
Reference<XComponent> xDocument;
// 启动OpenOffice组件对象
xContext = bootstrap();
// 获取OpenOffice的服务manager
xMSFactory = xContext->getServiceManager();
// 获取一个OpenOffice的桌面服务对象实例并且获取XComponentLoader接口
Reference<XInterface> desktop = xMSFactory->createInstanceWithContext(
OUString::createFromAscii("com.sun.star.frame.Desktop"),
xContext );
Reference<XComponentLoader> rComponentLoader( desktop, UNO_QUERY_THROW );
// 设置启动属性,这里将属性“Hidden”设为了true表示采用隐藏模式打开,也就是说新建文件的时候不让用户看到窗口
//在这里我们的属性序列loadPorps只有一个元素loadProps[0],你也可以设置多个元素的属性序列
Sequence<PropertyValue> loadProps(1);
loadProps[0].Name = OUString::createFromAscii("Hidden");
loadProps[0].Value = Any(true);//new Boolean(true);
//得到一个新建SpreadSheet文档的实例,注意这里的参数“private:factory/scalc”表示新建一个calc文档,
//参数“_blank”表示是一个空白文档
xDocument = rComponentLoader->loadComponentFromURL(
OUString::createFromAscii("private:factory/scalc"),
OUString::createFromAscii("_blank"),
0,
loadProps);
上面的这一部分代码就是启动OpenOffice相关组件,新建文档并获得文档实例。相对来说比较麻烦,很难记得住,但是他们基本上都是固定的,不需要改变,因此你可以把这部分封装起来,以简化使用。
接下来:
//获取一个XSpreadsheetDocument接口
Reference< XSpreadsheetDocument > rSheetDoc (xDocument, UNO_QUERY);
//获取XSpreadsheets接口来操作文档
Reference< XSpreadsheets > rSheets = rSheetDoc->getSheets();
//获取XIndexAccess接口,这样我们能采用下标index的方式来操作文档中的某个sheet
//还可以采用名称的方式来访问某个sheet,需要XNameAccess接口,在这里为了简单我们没有采用
Reference< XIndexAccess > xSheetsIA (rSheets, UNO_QUERY);
Any sheet = xSheetsIA->getByIndex( 0 ); //获取0号sheet的接口
Reference< XSpreadsheet > rSpSheet (sheet, UNO_QUERY);
double num = 1.0;
for(int i=0; i<10; i++,num+=2.0)
{
Reference<XCell> cell = rSpSheet->getCellByPosition(i, 0); //获取第i列,第0行的cell接口
cell->setValue(num); //给这个cell设置值
}
// 下面我们要计算第0行从0到9列这10个数的总和,并把它用红色字符输出在第0行第10列的位置
Reference<XCell> cell = rSpSheet->getCellByPosition(10, 0);
// 给第0行第10列这个cell插入公式"=SUM(A1:J1)",也可以用setFormula这个函数插入普通的字符串
cell->setFormula(OUString::createFromAscii("=SUM(A1:J1)"));
// 从第0行第10列这个cell获取它的XPropertySet接口,用于给它设置各种属性
Reference< XPropertySet > rCellProps (cell, UNO_QUERY);
Any PropVal;
PropVal <<= (Color)(0xff0000); //声明一个属性PropVal并给他塞入一个颜色0xff0000(红色)
// 用setPropertyValue函数设置属性,第一个参数表示将要设置字符的颜色,第二个参数是已经塞入颜色的PropVal
rCellProps->setPropertyValue(OUString::createFromAscii("CharColor"), PropVal);
接下来我们准备保存这个文档
// 从文档获取XStorable接口,准备保存
Reference<XStorable> rStore (xDocument, UNO_QUERY);
Sequence<PropertyValue> storeProps(1);
// 和前面类似,这里也是填入属性,属性的名字是"FilterName",表示要设置的是保存文件的格式
// 属性的值是"MS Excel 97",表示保存格式为Excel电子表格
storeProps[0].Name = OUString::createFromAscii("FilterName");
storeProps[0].Value = Any( OUString::createFromAscii("MS Excel 97") );
// 用XStorable接口的storeAsURL方法保存文档,第一个参数是保存路径,第二个参数是我们刚填好的保存格式属性
rStore->storeAsURL( OUString::createFromAscii("file:///c:/MyTest.xls"), storeProps );
// 释放文档,也就是关闭文档,这个必须执行,不然文档会处于打开状态不能被别的程序访问。
xDocument->dispose();
return 0;
}
代码就是这些,如果编译成功,运行后应该会在你的c盘根目录下生成一个MyTest.xls的电子表格文档,里面的内容以该如下图:
成功了!到此为止,我们已经完整地新建了一个xls文档并且填入了一些内容
可以看到,主要的使用原则就是从文档实例获取不同的接口,然后调用接口里的方法完成所需的功能。
(待续)
- OpenOffice Calc开发(C++) 7 一个例子的代码详解
- OpenOffice Calc开发(C++) 3 sdk的设置
- OpenOffice Calc开发(C++) 4 sdk的设置续
- OpenOffice Calc开发(C++) 6 如何创建自己的工程
- OpenOffice Calc开发(C++) 2 OpenOffice和sdk的下载安装和简介
- OpenOffice Calc开发(C++) 1 UTTSystem简单介绍 和 为什么要使用OpenOffice Calc
- OpenOffice Calc开发(C++) 5 第一个工程SpreadSheetTest
- openoffice中一个将java代码转换为c++代码的例子
- Creating an OpenOffice Calc Document with C#(转贴)
- LotusScript 操作 OpenOffice calc
- openoffice Calc问题
- CSS3 calc的用法详解
- [LibreOffice]Calc文档开发_001:Calc文档的创建
- OpenOffice.org Code Snippets--Get and modify the current selection in calc (in C++)
- Openoffice.org 的writer和calc ,已经可以满足我的工作需要
- base64code 的一个例子代码
- 一个代码滥用的例子
- 一个listView的例子代码
- 笑汇程序员论坛
- 记住名人的名字
- 网络工程师必懂的专业术语
- 《JAVA数据结构与算法》第二章源代码
- 被毁前的圆明园竟然这么美
- OpenOffice Calc开发(C++) 7 一个例子的代码详解
- Eclipse快捷键大全
- 利用过滤器filter解决乱码问题
- 未来最有前途的开发工具
- 中国协议分析网
- windows xp 下exe,msi文件不能安装的解决办法
- java socket/Serversocket编程详解(中/英文)
- C#.Net经典面试题目及答案
- 88