请问java 能调用EXCEL中VBA写的宏么
java中有个POI可以读写EXCEL 但可不可以调用VBA写的宏
EXCEL中的宏 都是由VBA来编写的我想实现 EXCEL中锁定指定的单元格 ,为读 其他可以编写,
POI可以实现么? 请教。 

解决方案 »

  1.   

    着急/. java用POI生成excel   如果能锁定最好 不能的话只能调用excel的 vba写的宏来锁定了
      

  2.   

    import org.apache.poi.hssf.usermodel.HSSFCell; 
    import org.apache.poi.hssf.usermodel.HSSFCellStyle; 
    import org.apache.poi.hssf.usermodel.HSSFRow; 
    import org.apache.poi.hssf.usermodel.HSSFSheet; 
    import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
    import org.apache.poi.poifs.filesystem.POIFSFileSystem; 
    /** 
    * @param inputFile 输入模板文件路径 
    * @param outputFile 输入文件存放于服务器路径 
    * @param dataList 待导出数据 
    * @throws Exception 
    * @roseuid: 
    */ 
    public void exportExcelFile(String inputFile, String outputFile, List dataList) throws Exception 

    //用模板文件构造poi 
    POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inputFile)); 
    //创建模板工作表 
    HSSFWorkbook templatewb = new HSSFWorkbook(fs); 
    //直接取模板第一个sheet对象 
    HSSFSheet templateSheet = templatewb.getSheetAt(1); 
    //得到模板的第一个sheet的第一行对象 为了得到模板样式 
    HSSFRow templateRow = templateSheet.getRow(0); //HSSFSheet timplateSheet = templatewb.getSheetAt(1); 
    //取得Excel文件的总列数 
    int columns = templateSheet.getRow((short) 0).getPhysicalNumberOfCells(); 
    Debug.println("columns is : " + columns); 
    //创建样式数组 
    HSSFCellStyle styleArray[] = new HSSFCellStyle[columns]; 
    //一次性创建所有列的样式放在数组里 
    for (int s = 0; s < columns; s++) 

    //得到数组实例 
    styleArray[s] = templatewb.createCellStyle(); 

    //循环对每一个单元格进行赋值 
    //定位行 
    for (int rowId = 1; rowId < dataList.size(); rowId++) 

    //依次取第rowId行数据 每一个数据是valueList 
    List valueList = (List) dataList.get(rowId - 1); 
    //定位列 
    for (int columnId = 0; columnId < columns; columnId++) 

    //依次取出对应与colunmId列的值 
    //每一个单元格的值 
    String dataValue = (String) valueList.get(columnId); 
    //取出colunmId列的的style 
    //模板每一列的样式 
    HSSFCellStyle style = styleArray[columnId]; 
    //取模板第colunmId列的单元格对象 
    //模板单元格对象 
    HSSFCell templateCell = templateRow.getCell((short) columnId); 
    //创建一个新的rowId行 行对象 
    //新建的行对象 
    HSSFRow hssfRow = templateSheet.createRow(rowId); 
    //创建新的rowId行 columnId列 单元格对象 
    //新建的单元格对象 
    HSSFCell cell = hssfRow.createCell((short) columnId); 
    //如果对应的模板单元格 样式为非锁定 
    if (templateCell.getCellStyle().getLocked() == false) 

    //设置此列style为非锁定 
    style.setLocked(false); 
    //设置到新的单元格上 
    cell.setCellStyle(style); 

    //否则样式为锁定 
    else 

    //设置此列style为锁定 
    style.setLocked(true); 
    //设置到新单元格上 
    cell.setCellStyle(style); 

    //设置编码 
    cell.setEncoding(HSSFCell.ENCODING_UTF_16); 
    //Debug.println("dataValue : " + dataValue); 
    //设置值 统一为String 
    cell.setCellValue(dataValue); 


    //设置输入流 
    FileOutputStream fOut = new FileOutputStream(outputFile); 
    //将模板的内容写到输出文件上 
    templatewb.write(fOut); 
    fOut.flush(); //操作结束,关闭文件 
    fOut.close(); }
      

  3.   

    行吗,,难说咯...micosoft和sun的东西