文件SAVE的时候不能使用相对路径 只能使用绝对路径么? 请教各位高手下面是代码:package com.sinoshow.report.cnpl.reportimpl;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;import com.actionsoft.application.server.conf.AWFConfig;
import com.actionsoft.awf.organization.control.UserContext;
import com.actionsoft.awf.util.DBSql;
import com.actionsoft.awf.util.EncryptFileUtil;
import com.actionsoft.awf.workflow.form.design.cache.SheetCache;
import com.actionsoft.awf.workflow.form.design.model.SheetModel;
import com.actionsoft.awf.workflow.metadata.cache.MetaDataCache;
import com.actionsoft.awf.workflow.metadata.model.MetaDataModel;
import com.actionsoft.htmlframework.web.ActionsoftWeb;
import com.jacob.com.Dispatch;
import com.sinoshow.report.cnpl.reportinterface.WordInterface;
import com.sinoshow.test.JacobTotal;public class WordReportImpl extends ActionsoftWeb implements WordInterface { public WordReportImpl(UserContext uc){
super(uc);
}

public WordReportImpl(){
super();
}


public String getWordReport(UserContext uc, String bindId, int formId) {
List litabnamezhu = new ArrayList();
List litabnamezi = new ArrayList();
List liField = new ArrayList();
long timeA = System.currentTimeMillis();
String filename = "";
Hashtable formht = (Hashtable)SheetCache.getSheetList(formId);
for(int ii = 0; ii < formht.size(); ii++){
SheetModel sheetModelForm = (SheetModel)formht.get(new Integer(ii));
String metaUUID = sheetModelForm._metadataUUID;
boolean b = sheetModelForm._isSubSheet;
Hashtable metaht = MetaDataCache.getList();
for(int jj = 0; jj < metaht.size(); jj++){
MetaDataModel model = (MetaDataModel) metaht.get(new Integer(jj));
if(model._uuid.equals(metaUUID)){
String tableName=model._entityName;
if(b == false){
litabnamezhu.add(tableName);
}else{
litabnamezi.add(tableName);
}
}
}
}
String docname = "";
System.out.println("===================================共有"+(litabnamezhu.size()+litabnamezi.size())+"个表,其中主表"+litabnamezhu.size()+"个,子表"+litabnamezi.size()+"个");
JacobTotal msWordManager = new JacobTotal();
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
ResultSet rszi = null;
PreparedStatement pszi = null;
ResultSet rszhu = null;
PreparedStatement pszhu = null;
conn = DBSql.open();
int quanColzhu = 0;
try {
int ifsuc = 0;
msWordManager.openDocument("D:\\juhui.doc");
Dispatch role = JacobTotal.word.getProperty("ActiveDocument").toDispatch();
Dispatch bookMarks = JacobTotal.documents.call(role, "Books").toDispatch();
String sqlzhu = "select * from "+(String)litabnamezhu.get(0)+" where bindid='"+bindId+"'";
pszhu = conn.prepareStatement(sqlzhu);
rszhu = pszhu.executeQuery();
ResultSetMetaData rsmdzhu = rszhu.getMetaData();
quanColzhu = rsmdzhu.getColumnCount();
for(int u = 11; u <= quanColzhu; u++){
String colName = rsmdzhu.getColumnName(u);
System.out.println("==========================="+colName);
boolean fieldEx = Dispatch.call(bookMarks, "Exists", colName).toBoolean();
String sql = "select * from "+(String)litabnamezhu.get(0)+" where bindid='"+bindId+"'";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if(rs.next()){
if(fieldEx == true){
String fieldreplace = rs.getString(colName)==null?"":rs.getString(colName);
ifsuc = msWordManager.replaceBookMarks(bookMarks, colName, fieldreplace);
if(ifsuc < 0){
System.out.println("替换书签异常");
}
System.out.println("----------------"+colName+"替换成功----------------");
}else{
System.out.println("指定的书签不存在");
}
}
ps.close();
rs.close();
}
pszhu.close();
rszhu.close();
int quanRow = 0;
int quanCol = 0;
if(litabnamezi.isEmpty() == false){
for(int y = 0; y < litabnamezi.size(); y++){
String tabnamezi = (String)litabnamezi.get(y);
String sqlzi = "select * from "+tabnamezi+" where bindid='"+bindId+"'";
pszi = conn.prepareStatement(sqlzi,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
rszi = pszi.executeQuery();
ResultSetMetaData rsmd = rszi.getMetaData();
quanCol = rsmd.getColumnCount();
liField.clear();
for(int u = 11; u <= quanCol; u++){
String colName = rsmd.getColumnName(u);
System.out.println("==========================="+colName);
liField.add(colName);
}
rszi.last();
quanRow = rszi.getRow();
rszi.first();
rszi.previous();
int count = 0;
for(int i = 1; i <= quanRow; i++){
msWordManager.addRow(y+2);
System.out.println("----------------位于第"+(y+2)+"个表中的第"+(i+1)+"行添加成功----------------");
count++;
}
System.out.println("----------------成功在第"+(y+2)+"个表中添加了"+count+"行----------------");
System.out.println("----------------获取的数据源如下----------------");
System.out.println("----------------共有"+quanRow+"行----------------");
System.out.println("----------------共有"+quanCol+"列,除去前10列固定字段后为"+(quanCol-10)+"列----------------");
int r = 0;
while(rszi.next()){
int g = 0;
for(int yy = 0; yy < liField.size(); yy++){
String fname = (String)liField.get(yy);
msWordManager.putTxtToCell(y+2, r+2, g+1, rszi.getString(fname)==null?"":rszi.getString(fname));
g++;
System.out.println("----------------位于第"+(y+2)+"个表中的第"+(r+2)+"行"+g+"列数据插入成功----------------");
}
r++;
}
System.out.println("----------------已在第"+(y+2)+"个表中共成功插入了"+(r)+"行数据----------------");
pszi.close();
rszi.close();
}
        String docPath = AWFConfig._iworkConf.getDocumentPath();
        docname = msWordManager.getAWSPath(docPath, timeA);
filename = timeA+".doc";
msWordManager.save("C:/juhui/中邮实验平台/cnplhd333/doccenter/tmp/group_/file_"+timeA+"/"+filename);
msWordManager.closeDocument();
msWordManager.close();
}else{
System.out.println("当前流程节点不存在子表");
msWordManager.save("D:\\juhui1.doc");
}
} catch (Exception e) {
System.out.println("----------------"+e);
}finally{
DBSql.close(conn, null, null);
}
int docEn = EncryptFileUtil.encryptFile(docname);
if(docEn < 0){
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^加密失败");
}else{
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^加密成功");
}
String fileURL = "downfile.wf?flag1=_&flag2=_"+timeA+"&sid=" + uc.getSessionId() + "&rootDir=tmp&filename=" + filename;
return "<html><title></title><script> window.location='" + fileURL + "';</script></html>";
}
}

解决方案 »

  1.   

    msWordManager.save("C:/juhui/中邮实验平台/cnplhd333/doccenter/tmp/group_/file_"+timeA+"/"+filename); 只要一写相对路径  
    例如这样写:
    msWordManager.save("../occenter/tmp/group_/file_"+timeA+"/"+filename);  这个方法就出现错误错误如下:----------------com.jacob.com.ComFailException: Invoke of: FileSaveAs
    Source: Microsoft Word
    Description: 
      

  2.   

    你可以生成一个对象,然后 再getAbsolutePath();看看如何File fl = new File("../occenter/tmp/group_/file_"+timeA+"/"+filename );
    msWordManager.save(fl.getA...());