Javaアクションexcel-互換office 2007以降

7973 ワード


前言
office 2007のバージョンでは標準的なアップグレードがあり、最も明らかなのはexcelファイルのファイル名接尾辞(ファイル拡張子)がxlsからxlsxに変わったことです.xls形式でxlsx形式のファイルを処理するのは操作できないので、注意が必要です.
逆に、xlsx形式のファイルを操作する方法でファイル拡張子(ファイルビット接尾辞)をxlsに操作するのは問題ありません.
本質的にはoffice以降のバージョンは以前のバージョンと互換性があるため、これはOffice開発コンポーネントpoiでも提案されている.すなわち、下向きに互換性があり、あるいは後ろ向きに互換性があり、古いシステムだけのものは新しいシステムで正常に使用することができます.
 
ここではlog 4 j 2を使用していますが、環境にログが構成されていない場合は、ログコードを削除してSystemに変更することができます.out,println();
log 4 j 2に興味がある場合は、APACHE LOG 4 Jを参照してください™ 2学習ノート-log 4 j 2環境各種タイプ出力+mavenmysqlスクロールファイルコンソール非同期フィルタに配備
 
maven依存
 

		
			org.apache.poi
			poi
			3.14
		

		
			org.apache.poi
			poi-ooxml
			3.14
		
		
			org.apache.poi
			poi-ooxml-schemas
			3.14
		
		
			org.apache.xmlbeans
			xmlbeans
			2.6.0
		

 
 
 
 
 
 
poiはofficeファイルを専門に操作する無料のAPIです.http://poi.apache.org/
 
くだらないことは言わないで、直接コードを貼ってください.
 
・excelファイルreadOfficeExcelFileの読み込み
・元のexcelファイルの再書き込み-末尾の判断がないため、writeOfficeExcelFileを上書きする可能性があります
・プログラムはexcleファイルを新規作成し、いくつかのデータを埋め込む.
 
列挙クラスは定数を提供します.この例では、
 
package com.bestcxx.mavenstu.mavenssh.util;

/**
 * @theme    -      
 * @author wujie
 */
public enum EnumUtil {
	//        
	FILE_OFFICE_EXCEL_NAME("officeExcelDemo.xlsx"),
	FILE_OFFICE_EXCEL_PATH("src/main/webapp/WEB-INF/file"),//office   excel  
	COMMON_DATABASE_PROPERTIES("config/jdbc.properties"),
	COMMON_ENCODING("utf-8"),
	FILE_TXT_PATH("src/main/webapp/WEB-INF/file/filetxt.txt"),//src/main/resources/file/filetxt.txt      ,      
	WECHAT_APPID("appid"),				   	//          appid
	WECHAT_APPSECRET("appsecret"), //          appsecret
	PROXY_SERVICEPORT_SHEZHI("0"),     //    -      ,0-NO,1-YES
	PROXY_PROXYHOST("192.168.1.1"),    //    -  IP
	PROXY_PROXYPORT("8080");    	  //    -    
	
      
    private String temStr;  
    private EnumUtil(String temStr){  
        this.temStr=temStr;  
    }  
    @Override  
    public String toString() {
        return String.valueOf (this.temStr);  
    }  
}

 
 
 
 
 
 
ツールクラス
 
package com.bestcxx.mavenstu.mavenssh.file;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * 
 * @theme    excel       
 * @author wujie
 * @Datetime 2017 3 24    2:52:10
 * HSSF -     Microsoft Excel       。 
 * XSSF -     Microsoft Excel OOXML       。 
 * HWPF -     Microsoft Word       。 
 * HSLF -     Microsoft PowerPoint       。 
 * HDGF -     Microsoft Visio       。 
 */
public class FileOfficeExcel {
	private static Logger logger=LogManager.getLogger(FileOfficeExcel.class);
	
	/**
	 * 
	 * @instruction   excel  
	 * @Datetime 2017 3 27    3:59:15
	 * @param excelPath      
	 * @param excelName       officeExcelDemo.xlsx 
	 */
	public void readOfficeExcelFile(String excelPath,String excelName) {
		try {
			
			File file = new File(excelPath, excelName);

			//         
			FileInputStream fi;

			fi = new FileInputStream(file);

			//   excel      Workbook   
			Workbook wb;
			wb = WorkbookFactory.create(fi);

			//        sheet -       
			Sheet sheet = wb.getSheetAt(0);

			//          
			int rowNum = sheet.getLastRowNum() + 1;//   1,          ,     0     
			//logger.info("
sheet :"+rowNum); // - i for(int i=2;i

 
 
 
 
 
テストクラス
 
package com.bestcxx.mavenstu.mavenssh.file;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Ignore;
import org.junit.Test;

import com.bestcxx.mavenstu.mavenssh.util.EnumUtil;

public class FileOfficeExcelTest {
	private static Logger logger=LogManager.getLogger(FileOfficeExcelTest.class);
	
	@Test
	//@Ignore
	public void testReadOfficeExcelFile(){
		FileOfficeExcel f=new FileOfficeExcel();
		//excel      
		String excelPath = EnumUtil.FILE_OFFICE_EXCEL_PATH.toString();
		
		//excel   
		String excelName = EnumUtil.FILE_OFFICE_EXCEL_NAME.toString();
		
		f.readOfficeExcelFile(excelPath,excelName);
	}
	
	@Test
	public void testWriteOfficeExcelFile(){
		FileOfficeExcel f=new FileOfficeExcel();
		
		//excel      
		String excelPath = EnumUtil.FILE_OFFICE_EXCEL_PATH.toString();
		//excel   
		String excelName = "test.xlsx";
		
		f.writeOfficeExcelFile(excelPath,excelName);
	}
	
	@Test
	public void testCreateOfficeExcelFile(){
		FileOfficeExcel f=new FileOfficeExcel();
		
		//excel      
		String excelPath = EnumUtil.FILE_OFFICE_EXCEL_PATH.toString();
		//excel   
		String excelName = "test.xlsx";
		
		f.createOfficeExcelFile(excelPath,excelName);
	}

}

 
 
 
 
 
本文は作者のオリジナルに属して、転載して声明を下さい:http://blog.csdn.net/bestcxx
+20170811補足+生成したファイルをダウンロードする場合、file Nameはname.xlsまたはname.xlsxフォーマット
 
OutputStream out = null;
		try {
			response.setContentType("application/vnd.ms-excel");   
			response.setHeader("Content-disposition", "attachment;filename=" + fileName);  
			out = response.getOutputStream();
			wb.write(out);//Workbook wb = new HSSFWorkbook();
			out.flush();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (wb != null) {wb.close();}
				if (out != null) {out.close();}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

+20180710補足+ファイルフィールドは、テキスト、数値、日付の3種類に分けられ、空の場合があります.
if(null!=row.getCell(1)){//    
           row.getCell(1).getStringCellValue();
        }

        if(null!=row.getCell(2)){//    
            //           ,Excel   ,       dubbo      ,     
            (int)row.getCell(2).getNumericCellValue();
        }

        if(null!=row.getCell(7)){//    
            e.setBusinessInsuranceAmount(new BigDecimal(row.getCell(7).getNumericCellValue()));
        }

if(null!=row.getCell(3)){//    
            //        
            row.getCell(3).getDateCellValue();
        }