簡體   English   中英

將Excel工作表(帶有圖表)復制到另一個Excel工作表

[英]copy excel sheet(With charts) to another excel sheet

我正在使用APACHE POI 3.0將工作表添加到現有的Excel工作表中。 工作正常。 但是由於APACHE POI在制作圖表方面存在局限性,因此我使用了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表格的部分。

HSSFWorkbook類中有方法cloneSheet()。 試試吧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM