読者です 読者をやめる 読者になる 読者になる

既存のエクセルファイルを編集する(Java)

Java

前回は新しいエクセルファイルと、シートを作成しましたが、今回は既存のエクセルシートの値を書き換えます。

のちのちは読み込むファイルや書き換える値をGUIから変更できるようにしなければいけないのですが、まずは練習ということでファイルのパスはハードコードです。

前回とやることはそんなに変わりませんが、
ファイルの読み込みにFileInputStreamとWorkbookFactoryクラスを使用しています。


使用したクラスとかメソッド

WorkbookFactory (POI API Documentation)

public static Workbook create(java.io.InputStream inp)
throws java.io.IOException,
InvalidFormatException,
EncryptedDocumentException

Workbook (POI API Documentation)

Sheet getSheet(java.lang.String name)
Get sheet with the given name


Sheet (POI API Documentation)

Row getRow(int rownum)
Returns the logical row (not physical) 0-based.


Row (POI API Documentation)

Cell getCell(int cellnum)
Get the cell representing a given column (logical cell) 0-based.

Cell (POI API Documentation)

void setCellValue(boolean value)
Set a boolean value for the cell


以下、ソースコード

package kinmu_kousu;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
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;


public class EditExcelSheet {
	
			//エクセルファイルを置いているフォルダー
			static final String INPUT_DIR = "/Users//Documents/";
					
			public static void main(String[] args) throws IOException {

		        // 変更するエクセルファイルを指定
		        FileInputStream in  = new FileInputStream(INPUT_DIR + "勤務表.xlsx");
		        Workbook wb = null;
		        
		        try {
			    // 既存のエクセルファイルを編集する際は、WorkbookFactoryを使用
		        wb = WorkbookFactory.create(in);
		       

		        } catch (Exception e) {
			    e.printStackTrace();
		        }
		        
		        //勤務表.xlsxの勤務表シートを取得
		        Sheet sheet = wb.getSheet("勤務表");
		        
		        //シートの6行目を取得 (名前が入っている) 
		        Row row = sheet.getRow(5);
		        
		        //6行目の3こ目のセルを取得
		        Cell cell = row.getCell(2); 
		        
		        //取得したセルにセットする値を指定
		        cell.setCellValue("変更後の名前");
		  
		        FileOutputStream out = null;
		        
		    	try {
		    	    // 変更するエクセルファイルを指定
		    	    out = new FileOutputStream(INPUT_DIR + "勤務表.xlsx");
		    	   
		    	    // 書き込み
		    	    wb.write(out);
		    	}catch(Exception e){
		    		e.printStackTrace();
		    	} finally{
		    		 out.close();
		    		 wb.close();
		    		 
		    	}
		        
	}

}