- 浏览: 144242 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zjw530134683:
按照你说的操作方式,word没有打印成功,但是EXCEL打印成 ...
java用JCom打印 -
listen-raining:
哥们,麻烦问下Unix操作系统下如何用jcom ?
java用JCom打印 -
另一花生:
楼主,我在刚开始学习这个,我发现您的这个文档学习了,但是我想知 ...
java用JCom打印 -
上官车月:
...
automation服务器不能创建对象 ActiveX -
skynet_java:
:jp.ne.so_net.ga2.no_ji.jcom.JC ...
java用JCom打印
java应用jcom将word转pdf
在JAVA中使用JCOM和JXL注意要点:
(1)在你的lib下要有jdom-1.0.jar,jxl-2.5.5.jar,jcom-2.2.4.jar,jcom.dll。(jcom下载地址(http://sourceforge.net/projects/jcom))
(2)要把jcom.dll同时放到你JDK的bin目录下或者放到系统盘的windows下(推荐放到JDK的BIN下)
(3)你的机器需要安装ms office以及acrobat(不是reader)注:Acrobat Reader 软件是一个用于浏览 PDF 文件的实用程序;而 Adobe Acrobat 4.0 软件则用来创建和改善 PDF 文件,它是解决信息的共享、检查和发布的完整工具。
把上面的JAR包都放好后开始写应用中的工具类(申明一下在JCOM中得到的都是IDispatch对象,以下还会抛出一个JComException的异常)
(1)首先应该判断一个传进来的路径是Word 或是 Excel 还是其他的东东。
if(path.endsWith(".doc")){
......
}
注:如果是excel后缀是".xls";
(2)然后你要有两个对象:
ReleaseManager rm = new ReleaseManager();
IDispatch xlsApp=null;
注:ReleaseManager相当于一个容器,与你机器上的所有JCOM组建交互,根据你传的参数他会去寻找你机器上的所有JCOM能操作的组建;
IDispatch 可以理解为一个对象,所有的东东都是对象;
(3)你要让他知道你要和EXCEL交互你得这样做
xlsApp = new IDispatch(rm, "Excel.Application");
(4)接着要得到一个Workbooks(工作薄)
IDispatch excel = (IDispatch) xlsApp.get("Workbooks");
(5)设置当前对象是否可见
xlsApp.put("Visible", new java.lang.Boolean(false));
(6)得到工作薄以后要打开
IDispatch workbook = (IDispatch) excel.method("open", new Object[] { FilePath(EXCEL存放的路径) });
(7)判断文件是否存在如果存在则删除
File f = new File(outPath);
if (f.exists())
f.delete();
(8)将工作薄另存为
workbook.method("saveAs", new Object[] { outPath, new Integer(9) });
(9)获得一个工作薄(workbook)下的所有工作表(Sheets)
IDispatch sheets = (IDispatch) workbook.get("Sheets");
注:得到的是一个数组;
(10)获得工作表(Sheets)的总数
int sheetsCount = Integer.parseInt(sheets.get("Count").toString());
(11)得到每个工作表(Sheets)的名称
for(int sheetInx=1;sheetInx <= sheetsCount;sheetInx++) {
IDispatch sheet = (IDispatch) sheets.get("item", new Object[] { new Integer(sheetInx) });
String sheetName = sheet.get("name").toString();
}
注意:excel都是从1开始遍历 而不是从0开始 所以for里面有多种写法看自己怎么顺手怎么写;
遍历工作表除了传索引还能传工作表名称:IDispatch sheet = ((IDispatch) sheets.get("item", new Object[] { sheetName }));
(12)获得正在活动的工作表(sheet)
IDispatch asheet = (IDispatch) xlsApp.get("ActiveSheet");
注:xlsApp是从ReleaseManager里面获得EXCEL对象的一个IDispatch对象
如果是获得sheets要先获得工作薄(Workbook)然后用工作薄(Workbook)获得他下的所有工作表(sheets)
(13)获得工作表里面的所有行总数(6万多行吧)
IDispatch row = (IDispatch)cursheet.get("Rows");
int rows = Integer.parseInt(row.get("Count").toString());
(14)获得工作表里面的所有列总数(256列)
IDispatch col = (IDispatch)sheet.get("Columns");
int cols = Integer.parseInt(col.get("Count").toString());
(15)获得工作表里面可视的所有行总数
IDispatch row = (IDispatch) ((IDispatch)cursheet.get("UsedRange")).get("Rows");
int rows = Integer.parseInt(row.get("Count").toString());
(16)获得工作表里面可视的所有列总数
IDispatch col = (IDispatch) ((IDispatch)cursheet.get("UsedRange")).get("Columns");
int cols = Integer.parseInt(col.get("Count").toString());
(17)获得行列以后要获得里面的内容(这里用的rows 和 cols就是上面所得的)
String cellVal="";
String cellTxt="";
String hasFormula= "";
String cellFormula="";
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
IDispatch cells = (IDispatch) cursheet.get("Cells", new Object[] { new Integer(i+1),new Integer(j+1) });
cellVal = cells.get("value").toString();
cellTxt = cells.get("text").toString();
hasFormula = cells.get("HasFormula").toString();
cellFormula = cells.get("FormulaR1C1").toString();
}
}
注:这个遍历的时候也是从1开始;
cells.get("value")获得的是浮点数格式 如果你输入的是1,得到的会是1.0;
cells.get("text")获得的是本身,你输入什么获得的就是什么;
cells.get("HasFormula")判断是否是公式,如果单元格里是公式则返回真(true),如果不是公式则返回假(false);
cells.get("FormulaR1C1")获得公式,获得单元格里公式的内容;
(18)保护工作表
asheet.method("Protect", new Object[] { password, new java.lang.Boolean(true), new java.lang.Boolean(true) });
注:Protect后有N多参数 第1--3个分别是 password,DrawingObjects,Contects。
(19)解工作表保护
asheet.method("Unprotect", new Object[] { password });
(20)在finally里面写关闭
if (xlsApp != null) {
((IDispatch) xlsApp.get("ActiveWorkbook")).put("Saved", new java.lang.Boolean(true)); //保存工作薄
xlsApp.method("quit", null); //quit 是关闭的是整个EXCEL
xlsApp = null;
}
rm.release();
rm = null;
(21)关闭根据情况也写在finally 里面
workbook.method("close", null);
xlsApp.method("quit", null);
xlsApp=null;
rm.release();
rm = null;
注:workbook.method("close", null);关闭的是Workbook里的工作表;
xlsApp.method("quit", null);关闭的是整个工作薄
注意:
关闭的时候一定要加上
//rm 就是ReleaseManager的实例
rm.release();
rm = null;
如果你打开EXCEL不加上面两句的话在进程里面还运行着EXCEL.EXE
附:word转pdf实例:
import jp.ne.so_net.ga2.no_ji.jcom.IDispatch; import jp.ne.so_net.ga2.no_ji.jcom.ReleaseManager; public class Office2Pdf { public void createPDF(String officePath,String pdfPath) throws Exception { ReleaseManager rm = null; IDispatch app = null; try { rm=new ReleaseManager(); app = new IDispatch(rm, "PDFMakerAPI.PDFMakerApp"); app.method("CreatePDF",new Object[]{officePath,pdfPath}); } catch (Exception e) { e.printStackTrace(); } finally { try { app=null; rm.release(); rm = null; } catch (Exception e) { throw e; } } } public static void main(String[] args) throws Exception { Office2Pdf one=new Office2Pdf(); one.createPDF("D:\\an\\11.doc","D:\\an\\11.pdf"); } }
发表评论
-
jvm32位和64位的区别
2016-10-27 09:44 652jvm32位和64位的区别 : http://zyslov ... -
正则表达式
2016-09-28 14:10 468匹配中文字符的正则表达式: [/u4e00-/u9fa5]评 ... -
使用eclipse调用天气预报的测试代码WSDL
2012-06-01 13:40 37691. 下载axis_src_1.4.zip文件 下载 ... -
java的volatile关键字小记
2012-05-31 16:47 1243用在多线程,同 ... -
JAVA与数据结构 集合链表
2012-04-26 19:16 1019http://hi.baidu.com/huifu111/bl ... -
JNLP、webStart 和applet的区别
2012-02-29 22:36 12761. JNLP是一个java网络发布协议,是一个规范,规范中可 ... -
OSGI如何读取插件中的资源文件
2011-11-16 11:17 1488思路就是通过bundleContext来取得资源。 首先,要在 ... -
java基础 ThreadLocal
2011-11-15 20:31 912今天学习了ThreadLocal,和大家分享下,理解的不是很透 ... -
osgi 实战的读书笔记整理
2011-11-07 22:24 976对osgi实战读书整理了一点笔记,欢迎下载 -
equinox 加载类顺序研究
2011-10-27 15:31 898讲解详细: http://www.cnblogs.com/ ... -
javax.mail.NoSuchProviderException: smtp (weblogic10+osgi)解决办法及原因
2011-08-29 09:54 5151org.springframework.mail.Ma ... -
在myeclipse中点击 deploy 按钮,无法部署!
2011-03-30 14:15 3188如何在myeclipse布置非myeclipse创建的工 ... -
POI+jfreechart资料2
2010-12-22 16:19 1081JFreeChart类: void setAntiA ... -
POI+jfreechart资料
2010-12-22 16:17 2821Jfreechart功能介绍 JFreeChar ... -
字符编码笔记:ASCII,Unicode和UTF-8
2010-11-04 14:49 758字符编码笔记:ASCII,Un ... -
socket学习笔记(1)
2010-11-01 15:28 991client端的代码 package test2; ... -
锁定文件的一部分,独占打开文件,是测试拷贝处用的
2010-10-28 09:40 1293import java.io.File; import ja ... -
JCOM生成Excel2
2010-05-28 13:09 1841import java.io.File; imp ... -
用JCom生成Excel文档
2010-05-28 11:20 1667代码:import java.io.File; import ... -
用Jcom生成word,以及在word中添加表格
2010-05-28 11:17 1389JCom可以支持打印,支持生成word,生成Excel,并且可 ...
相关推荐
本主题聚焦于使用Jcom调用JNI技术来实现这一转换。以下是对这个过程的详细解析: 首先,理解几个核心概念: 1. **Jcom**:Jcom是一款Java组件,它提供了对COM组件(Component Object Model)的访问能力。COM是微软...
"Jcom转换office为pdf"这个主题涉及到的是如何使用Java库JCom来实现将Microsoft Office格式的文件(如Word、Excel、PowerPoint)转换成PDF格式。这种转换在多种场景下都是必要的,比如保证文档在不同平台和设备上的...
实现word excel ppt转为pdf,并提供转格式后删除原来的文件。(需要使用jcom)
标题中的"jcom.jar和jcom.dll"是两个关键组件,它们在Java环境中用于与Microsoft Office应用程序,如Visio、Word和Excel进行交互,并支持文件转换功能。jcom.jar是Java类库,它包含了用于与DLL(动态链接库)交互的...
三种java转换word 的方式 ...2、JCom是日本的一个开源项目,可以轻松实现office转换pdf 3、可以利用开源的OpenOffice,这个是linux提供的一个用于office的工具,调用内部API可以方便转换。 另外实现pdfflash播放
Java中的JCOM技术允许开发人员使用Java来操作Microsoft Office对象,比如Excel、Word和PowerPoint,这主要得益于Java与COM(Component Object Model)之间的桥梁。COM是微软的一种接口技术,常用于Windows平台上的...
要使用JCom库进行Word和Excel打印,首先需要确保在运行环境中安装了Microsoft Office,并且Java程序具有访问本地系统资源的权限。在项目中,你需要引入JCom的依赖文件,例如`JCom-2.2.0-1.jar`和`jcom.jar`。这些jar...
这个组件的核心是 `jcom.dll` 文件,这是一个动态链接库(Dynamic Link Library),在Windows操作系统中常见,它包含了特定的函数和资源,能够被Java程序调用来实现特定的功能。 描述中提到的 "支持 java 的excel ...
jcom-2.2.4是一款在IT行业中广泛使用的组件,它包含了两个核心文件——`jcom.dll`和`jcom.jar`,以及配套的API文档和Java源代码。本文将详细阐述这两个关键文件的功能和作用,并探讨其API文档和源码对于开发者的重要...
JCom会自动处理参数类型转换和调用过程中的异常处理。 5. **事件处理**:COM组件往往支持事件机制,JCom也提供了相应的事件监听器,使得Java程序可以订阅并处理来自COM组件的事件。 6. **线程安全**:由于COM组件...
同时,由于`jcom.dll`是Windows特有的,所以只有在Windows环境下运行的Java程序才能使用JCom。对于非Windows系统,可能需要寻找其他兼容的库来实现类似的跨平台COM访问。 总之,JCom库为Java开发者提供了强大的能力...
标签“源码”和“工具”暗示了这个过程可能涉及编程,即通过编写代码或使用特定的转换软件来实现Word到HTML的转换。源码可能是指提供了用于转换的编程代码,例如使用Python、Java或JavaScript等语言编写的脚本。工具...
- **与Office应用程序交互**:JAVA程序可以通过JCOM调用Word、Excel等Office组件,实现文档的生成、编辑等功能。 - **集成第三方控件**:许多Windows平台的控件是基于COM的,JCOM可以帮助JAVA程序集成这些控件,提升...
理解jcom如何封装和抛出异常,以及如何在Java代码中适当地捕获和处理这些异常,是确保程序稳定运行的重要部分。 7. **性能优化**:由于涉及到本地方法调用,性能可能是使用jcom时需要考虑的问题。理解源码可以帮助...
在IT行业中,`jcom.jar` 和 `jcom.dll` 文件是两个关键组件,它们通常与Java和.NET环境中的跨平台通信有关。`jcom` 是一个专有名词,可能是某个特定库或工具的标识,它允许Java应用程序与基于.NET Framework的应用...
值得注意的是,JCOM库的使用可能会受到Java版本和操作系统版本的影响,因此在实际应用中需要确保兼容性。同时,由于跨语言交互的复杂性,调试过程中可能需要对COM组件的日志和Java的异常堆栈信息进行分析。 总之,...
基于Java的通用PDF文档生成开源软件的设计 ...本文的设计目标是实现一个绿色、开源、跨平台的PDF文档生成软件,该软件可以快速、方便地将各种结构化的信息和文档转换成PDF文档,且转换后的PDF文档字体适中、图片清晰。
本教程将详细介绍如何使用`jcom`来实现Java写Excel的实例,并涵盖关键知识点。 首先,`jcom`库利用Java的JNI(Java Native Interface)技术,通过调用Windows平台上的`dll`文件与Excel进行通信。在Java项目中,你...
在这个压缩包中,你可能会找到使用JCOM进行Excel打印的具体实现代码。 首先,我们需要理解Java中打印的基本概念。在Java中,打印主要是通过`java.awt.print`包中的类来实现的,如`PrinterJob`、`PageFormat`和`...