2016-03-24 216 views
0

我使用APACHE POI 3.0将表格添加到现有的Excel表格中。它工作正常。 但是,由于APACHE POI在制作图表方面有局限性,我使用了一个模板excel文件来创建图表,这同样可以正常工作,但是这总会导致新的excel文件。 如果我有一个现有的Excel工作表,并且我想添加一个工作表,并有图表,我无法做到这一点。因为,当我创建图表时,我使用模板文件,并且它总是生成一个新的excel文件。 所以我想知道是否有添加片材到Excel,其中所述片材具有图表将excel表格(带图表)复制到另一个excel表格

public class TagBrowserSelection 
{ 
    private static String[] excelBarPlot_Template  = { "","barPlot_1Panel_template.xlsx"}; 
    private static String[] excelPieChart_Template  = { "","pieChart_1Panel_template.xlsx"}; 
    private static String[] excelPieAndBarPlot_Template = { "","pieAndBarChart_1Panel_template.xlsx"}; 

    private static String REGEX      = ""; 

    static public boolean makeTagBrowserSelection(String strOutputFileName, ArrayList<TagBrowserChildPanel> childList, String sheetName, boolean addSheet, ArrayList<Boolean> chartAttributes) 
    { 
     // chart attributes 
     boolean addBarChart = chartAttributes.get(0); 
     boolean addPieChart = chartAttributes.get(1); 
     boolean addNoTag = chartAttributes.get(2); 
     boolean addZeros = chartAttributes.get(3); 

     REGEX = "^" + sheetName; 
     Pattern p = Pattern.compile(REGEX); 

     String[] templateArray = null; 
     if (addBarChart && addPieChart) 
      templateArray = excelPieAndBarPlot_Template; 
     else if (addBarChart) 
      templateArray = excelBarPlot_Template; 
     else if (addPieChart) 
      templateArray = excelPieChart_Template; 

     try 
     { 
      int number = childList.size(); 
      XSSFWorkbook workbook = null; 
      XSSFWorkbook wb = null; 
      XSSFSheet sheet = null; 
      int col_num = 0; 
      int row_num = 0; 
      XSSFRow row = null; 
      XSSFCell cell = null; 
      // if adding sheet to existing excel file 
      if (addSheet) 
      { 
       FileInputStream fis = new FileInputStream(new File(strOutputFileName)); 
       workbook = new XSSFWorkbook(fis); 
       fis.close(); 

       // number of existing sheets in excel file 
       int numberOfSheets = workbook.getNumberOfSheets(); 

       // check is sheetName exists already 
       if (isSheetExist(sheetName, workbook)) 
       { 
        int counter = 1; 
        for (int ii = 0; ii < numberOfSheets; ii++) 
        { 
         Matcher m = p.matcher(workbook.getSheetName(ii)); 
         if (m.find()) 
          counter++; 
        } 
        sheetName = sheetName + " (" + counter + ")"; 
       } 
      } 
      else 
      { 
       workbook = new XSSFWorkbook(); 
      } 

它的任何溶液==================== ==================================================

  // if template file needs to be used(if bar chart/pie chart option is selected) 
      if (templateArray != null) 
      { 
       InputStream is = TagBrowserSelection.class.getClassLoader().getResourceAsStream(templateArray[number]); 
       wb = new XSSFWorkbook(OPCPackage.open(is)); 
       sheet = wb.getSheetAt(0); 
       // wb.close(); 
      } 
      else 
      { 
       sheet = workbook.createSheet(sheetName); 
      } 

      // Freeze top two row 
      // sheet.createFreezePane(0, 1, 0, 1); 

      // Filling up the workbook and performing the row/column formatting 
      for (TagBrowserChildPanel child : childList) 
      { 
       // Check if row is already created before(previous tag category) 
       row = sheet.getRow(0); 
       if (row == null) 
        row = sheet.createRow(0); 

       // Adding tag category name as header 
       String tagCategory = child.getSelectedCategory().getName(); 

       cell = row.createCell(col_num); 
       cell.setCellValue(tagCategory); 

       row = sheet.getRow(1); 
       if (row == null) 
        row = sheet.createRow(1); 

       // Adding column headers 
       cell = row.createCell(col_num); 
       cell.setCellValue("tag"); 
       cell = row.createCell(col_num + 1); 
       cell.setCellValue("counts"); 

       row_num = 2; 

       // Adding tag category document summary(name and counts) 
       ArrayList<TagSummaryItem> tagSummary = child.getTagChartCounts(); 
       for (int i = 0; i < tagSummary.size(); i++) 
       { 
        // Check if row is already created before(previous tag category) 
        row = sheet.getRow(row_num); 
        if (row == null) 
         row = sheet.createRow(row_num); 

        cell = row.createCell(col_num); 
        if (!addNoTag) 
        { 
         if (tagSummary.get(i).m_strTag == "[No Tag]") 
          continue; 
        } 
        if (!addZeros) 
        { 
         if (tagSummary.get(i).m_nCount == 0) 
          continue; 
        } 
        cell.setCellValue(tagSummary.get(i).m_strTag); 
        cell = row.createCell(col_num + 1); 
        cell.setCellValue(tagSummary.get(i).m_nCount); 
        row_num++; 
       } 
       // auto-size of tag column 
       sheet.autoSizeColumn(col_num); 

       col_num = col_num + 3; 
      } 

      FileOutputStream out = new FileOutputStream(strOutputFileName); 

      if (templateArray != null) 
      { 
       wb.setSheetName(0, sheetName); 
       wb.write(out); 
       wb.close(); 
      } 
      else 
      { 
       workbook.write(out); 
       workbook.close(); 
      } 
      out.close(); 
     } 
     catch (Exception e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return true; 
    } 

以上是我的代码,它的一个代码。我分为两部分。部分是使用模板制作图表excel表单的部分。

回答

0

HSSFWorkbook类中有方法cloneSheet()。尝试一下。

+1

虽然这个答案在技术上可能是正确的,但它的质量很差。阐述! – SubliemeSiem

+0

这只适用于相同工作簿的情况。我需要将工作表从一个工作簿复制到另一个工作簿。我试图复制所有单元格,但它只复制了不是图表的值。 – user1631306

相关问题