1. 程式人生 > >POI 複製excel一行到另外一個sheet頁(修改)

POI 複製excel一行到另外一個sheet頁(修改)

package cosmic.leon;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
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.hssf.util.Region;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class RowCopy {

 /**
  * @param args
  * @throws IOException
  * @throws FileNotFoundException
  */

 @SuppressWarnings("deprecation")
 public static void main(String[] args) {
  try {
   POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(
     "exlsample.xls"));
   HSSFWorkbook wb = new HSSFWorkbook(fs);

//source ,target 為,源sheet 頁和目標sheet頁,
   copyRows(wb, "source", "target", 3, 4, 20);
   FileOutputStream fileOut = new FileOutputStream("exlsample.xls");
   wb.write(fileOut);
   fileOut.flush();
   fileOut.close();
   System.out.println("Operation finished......");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public static void copyRows(HSSFWorkbook wb, String pSourceSheetName,
   String pTargetSheetName, int pStartRow, int pEndRow, int pPosition) {
  HSSFRow sourceRow = null;
  HSSFRow targetRow = null;
  HSSFCell sourceCell = null;
  HSSFCell targetCell = null;
  HSSFSheet sourceSheet = null;
  HSSFSheet targetSheet = null;
  Region region = null;
  int cType;
  int i;
  short j;
  int targetRowFrom;
  int targetRowTo;

  if ((pStartRow == -1) || (pEndRow == -1)) {
   return;
  }
  sourceSheet = wb.getSheet(pSourceSheetName);
  targetSheet = wb.getSheet(pTargetSheetName);
  // 拷貝合併的單元格
  for (i = 0; i < sourceSheet.getNumMergedRegions(); i++) {
   region = sourceSheet.getMergedRegionAt(i);
   if ((region.getRowFrom() >= pStartRow)
     && (region.getRowTo() <= pEndRow)) {
    targetRowFrom = region.getRowFrom() - pStartRow + pPosition;
    targetRowTo = region.getRowTo() - pStartRow + pPosition;
    region.setRowFrom(targetRowFrom);
    region.setRowTo(targetRowTo);
    targetSheet.addMergedRegion(region);
   }
  }
  // 設定列寬
  for (i = pStartRow; i <= pEndRow; i++) {
   sourceRow = sourceSheet.getRow(i);
   if (sourceRow != null) {
    for (j = sourceRow.getLastCellNum(); j > sourceRow
      .getFirstCellNum(); j--) {
     targetSheet
       .setColumnWidth(j, sourceSheet.getColumnWidth(j));
     targetSheet.setColumnHidden(j, false);
    }
    break;
   }
  }
  // 拷貝行並填充資料
  for (; i <= pEndRow; i++) {
   sourceRow = sourceSheet.getRow(i);
   if (sourceRow == null) {
    continue;
   }
   targetRow = targetSheet.createRow(i - pStartRow + pPosition);
   targetRow.setHeight(sourceRow.getHeight());
   for (j = sourceRow.getFirstCellNum(); j < sourceRow
     .getPhysicalNumberOfCells(); j++) {
    sourceCell = sourceRow.getCell(j);
    if (sourceCell == null) {
     continue;
    }
    targetCell = targetRow.createCell(j);
    targetCell.setEncoding(sourceCell.getEncoding());
    targetCell.setCellStyle(sourceCell.getCellStyle());
    cType = sourceCell.getCellType();
    targetCell.setCellType(cType);
    switch (cType) {
    case HSSFCell.CELL_TYPE_BOOLEAN:
     targetCell.setCellValue(sourceCell.getBooleanCellValue());
     System.out.println("--------TYPE_BOOLEAN:"
       + targetCell.getBooleanCellValue());
     break;
    case HSSFCell.CELL_TYPE_ERROR:
     targetCell
       .setCellErrorValue(sourceCell.getErrorCellValue());
     System.out.println("--------TYPE_ERROR:"
       + targetCell.getErrorCellValue());
     break;
    case HSSFCell.CELL_TYPE_FORMULA:
     // parseFormula這個函式的用途在後面說明
     targetCell.setCellFormula(parseFormula(sourceCell
       .getCellFormula()));
     System.out.println("--------TYPE_FORMULA:"
       + targetCell.getCellFormula());
     break;
    case HSSFCell.CELL_TYPE_NUMERIC:
     targetCell.setCellValue(sourceCell.getNumericCellValue());
     System.out.println("--------TYPE_NUMERIC:"
       + targetCell.getNumericCellValue());
     break;
    case HSSFCell.CELL_TYPE_STRING:
     targetCell
       .setCellValue(sourceCell.getRichStringCellValue());
     System.out.println("--------TYPE_STRING:" + i
       + targetCell.getRichStringCellValue());
     break;
    }

   }

  }

 }

 private static String parseFormula(String pPOIFormula) {
  final String cstReplaceString = "ATTR(semiVolatile)"; //$NON-NLS-1$
  StringBuffer result = null;
  int index;

  result = new StringBuffer();
  index = pPOIFormula.indexOf(cstReplaceString);
  if (index >= 0) {
   result.append(pPOIFormula.substring(0, index));
   result.append(pPOIFormula.substring(index
     + cstReplaceString.length()));
  } else {
   result.append(pPOIFormula);
  }

  return result.toString();
 }

}
 

相關推薦

POI 複製excel一行另外一個sheet(修改)

package cosmic.leon; import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IO

excel統計另外一個sheet的篩選資料

在sheet1裡面有一組資料,在兩個不同的sheet裡面統計另一個的資料,同一個sheet的時候也一樣。 例子:第一個sheet,需要計算出重複的資料 第二個sheet: 在需要統計的表格裡,宣告一下函式:=COUNTIF(SheetName!A1:A200,"Table

多個潤乾報表,匯出到一個excel中的不同sheet

潤乾報表作為報表編輯工具使用起來十分的簡單方便,只需要簡單的屬性設定便可以實現匯出、列印等功能(具體參見潤乾開發應用文件),令人很鬱悶的是潤乾的匯出只是單表的匯出。 最近就有這麼一個需求:有很多.raq報表檔案,在一個頁面中列出所有的檔案的名稱,通過複選框選中下載,要求匯出

python 多個excel合併到一個sheet

-- coding:utf-8 -- #多個excel合併成一個sheet import xlrd, xlsxwriter 待合併excel allxls = [“C:\Users\zhudong\Desktop\azkaban自動爬取\2018-09-01.xlsx”, “C:

python 將多個具有相同表頭內容的excel合併到一個籤的excel

多個excel 合併成一個多sheet的excel -- coding:utf-8 -- import xlrd, xlsxwriter 待合併excel allxls = [“C:\Users\zhudong\Desktop\azkaban自動爬取\2018-09-01.x

資料列印到excel,支援多sheet

public class excelDemo {     public static void main(String[] args) {         try{          

c 讀取Excel的第一個Sheet

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

使用POI讀取EXCEL中的所有Sheet

{        HSSFWorkbook workbook=new HSSFWorkbook(new FileInputStream(new File("/file/student.xls")));        HSSFSheet sheet=null;        for (int i =0; i &

#Java--POIExcel匯出工具類(支援多個sheet同時匯出)

一、核心程式碼 package com.yx.yzh.utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.

POI 複製不同Sheet合成Excel檔案,完美解決單元格樣式和角標問題

專案背景: 1、需要從不同的Excel模板中讀取Sheet,生成到彙總的Excel檔案中 2、Excel格式是 Office2007版本,xlsx格式 3、需要將模板檔案的內容和格式,拷貝到新的檔案 4、解決POI 複製格式異常問題 工具程式碼: package com.sw

一個excel中的sheet拷貝到另外一個excel

     任務描述 :把 source.xls 中的某個sheet 拷貝到 target.xls中去(注意,刪除了source.xls中的sheet)。  目標檔名、原檔名、拷貝的sheet名存在當前xls vba檔案的A2 B2 C2單元格中 。 Sub 按鈕1_Cli

excel怎麽把一個sheet的 全部內容打印到一紙上

jin http 內容 分享圖片 exce htm 打印 alt art 參考 https://jingyan.baidu.com/article/5225f26b04005ee6fa090830.htmlexcel怎麽把一個she

java讀取excel獲取數據寫入到另外一個excel

string stat arr final user tostring enc ++ cef pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.a

ExcelSheet復制

進行 pre ktr trace eat div reat 問題 讀寫 最近在做一個項目,其中涉及基於模板對Excel的Sheet頁進行復制。在網上嘗試了很多,發現都不夠完美,苦惱。 然後在查閱資料的過程中,發現有一篇提及,POI的API只對同一個Excel文件中的She

項目筆記:導出Excel功能分sheet插入數據

mkdir system getpara creates service posit ade quest mst   導出Excel功能分sheet頁處理數據: /*導出EXCEL*/ public void createExcel() { log.info("導

openoffice轉excel為pdf檔案,根據excel檔案大小設定pdf頁面大小,只適用一個sheet的情況

1、maven注入連線openoffice的Jar和poi         <dependency>             <

讀取excel檔案內容輸入到另外一個檔案

package com.example.demo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import

你需要一個新的model實體的時候必須new一個.奇怪的問題: 使用poi解析Excel的把資料插入資料庫同時把資料放在一個list中,返回到頁面展示,結果頁面把最後一條資料顯示了N次

  資料庫顯示資料正常被插 插入一條列印一次資料,也是正常的,但是執行完,list就全部變成了最後一條資料.很奇怪       單步除錯 給list插入第一條資料 model是6607 連續插了多條資料都是6607 而且所有的值都變成了一樣

EXCELsheet公用類讀取方式

大概思路: 1.獲取前臺傳遞過來的FILE檔案及需要解析的XML檔案ID XML 如下: <?xml version="1.0" encoding="UTF-8" ?> <excels> <!-- 電力排程機構--><excel id="SCSE

Excel轉Html(十一)--POI處理Excel-獲取sheet總行數-總列數-行高-列高

獲取sheet行總數:sheet.getLastRowNum() 列總數:dataMap.get("maxColNum-" + form.getFormName() 獲取列最多的行,特別注意:sheet.getRow(0).getPhysicalNumberOfCells()不準確 行高:r