POI 조작 wrod 와 excel 문서

3839 단어 excel자바POI
더 읽 기
자바 POI 를 이용 하여 워드 엑셀 을 읽 고 쓰 는 것 도 편리 하 다.
1. java. io. IOException: 전체 헤 더 를 읽 을 수 없 음;0 bytes read; expected 512 bytes
주로 여러 개의 문 서 를 열 어 읽 고 쓰 면 문제 가 생 긴 다.문 서 를 열 려 면 단일 모드 를 사용 해 야 합 니 다.
한 스 레 드 에 HSSFWorkbok (excel Workbook obj) 을 열 었 습 니 다. 다른 함수 에서 하 나 를 더 열 면 이 문제 가 발생 합 니 다.
또 하나의 큰 구 덩이 는 엑셀 파일 두 개 를 열 면 두 개의 file 이지 만 이 문제 가 발생 할 수 있다 는 것 이다.
나의 테스트 함 수 는 이렇다.
    /**
     * This function confirms , CANNOT open two HSSFWorkbook in same time, even opent two different file
     * @param filepath1
     * @param filepath2
     */
    public void openTwoXlsSametime(String filepath1,String filepath2){
	try {
	    FileInputStream fin1=new FileInputStream(new File(filepath1));
	    FileInputStream fin2=new FileInputStream(new File(filepath2));
	    HSSFWorkbook wk1 = new HSSFWorkbook(fin1);
	    HSSFWorkbook wk2 = new HSSFWorkbook(fin2);
	    wk1.getSheet("Workflow");
	    wk2.getSheet("Workflow");
	} catch (FileNotFoundException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	} catch (IOException e) {
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
	
    }

너 는 이상 하 게 던 지 는 것 을 볼 수 있 을 것 이다. 사실은 아무것도 하지 않 았 는데, 단지 엑셀 두 개 를 여 는 것 이다.
2. 그리고 나 는 또 하나의 경험 을 얻 었 다.
바로 new FileOutputStream (new File () 입 니 다. 이 파일 이 존재 하면 0 으로 청 소 됩 니 다. 제 가 append 방식 으로 열 어야 하나 요?  new FileOutputStream(new File(),true) ? 확실히 그렇습니다. 읽 고 쓰 려 면 FileOutputStream 을 append 모드 로 해 야 합 니 다.
내 가 만난 문 제 는 하나의 엑셀 이 읽 고 쓰 며 하나의 sheet 표 내용 을 읽 고 처리 한 후에 다른 sheet 에 쓰 는 것 이다. 이것 도 안 되 고 어떻게 해 야 할 지 모른다 는 것 이다.
그래서 나 는 엑셀 을 처리 한 후에 csv 텍스트 파일 을 쓴 다음 에 sheet 표 에 수 동 으로 복사 할 수 밖 에 없 었 다.
3. POI write XSSFWorkbook, 엑셀 날짜 문자열 을 쓰 고 setCellValue (stringvalue) 로 엑셀 을 열 면 leading aspotroph '가 안에 있 는 것 을 발견 하고 오랫동안 고생 한 후에 해결 방안 을 찾 았 습 니 다.
XSSFworkbook 문자열 형식 데 이 터 는 다음 방법 을 사용 해 야 합 니 다.
XSSFCellStyle textFormatStyle = (XSSFCellStyle) workbook.createCellStyle();
               textFormatStyle.setDataFormat((short)BuiltinFormats.getBuiltinFormat("text"));
XSSFCell cell = (XSSFCell) r.createCell(colIndix);
cell.setCellStyle(textFormatStyle);
참고:http://apache-poi.1045710.n5.nabble.com/Adding-dates-as-text-with-a-leading-apostrophe-td3283872.html
4. POI 는 엑셀 을 읽 고 한 엑셀 에서 읽 은 다음 다른 엑셀 에 쓴다.
어떻게 엑셀 에 해당 하 는 cell style 을 읽 고 엑셀 에 정확하게 기록 합 니까?
엑셀 을 쓰 는 cellStyle 은 단순 한 new Style 이 아니 라 잘못 보고 할 수 있 습 니 다.오류 exception 기억 이 안 나 요. 인터넷 에서 찾 을 수 있어 요.
읽 기, 복제, 그리고 사용 해 야 합 니 다.
origStyle = titleRow.getCell(ri).getCellStyle();
textFormatStyle = (XSSFCellStyle) wWorkbook.createCellStyle();
textFormatStyle.cloneStyleFrom(origStyle);
XSSFCell nCell = (XSSFCell) row0.createCell(ri);
nCell.setCellStyle(textFormatStyle);
5. 이전에 Jekins 에 배치 되 어 실행 되 었 는데, 항상 오 류 를 보고 합 니 다.
org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException
웹 페이지 에 서 는 sellCellValue (value) 가 빈 값 을 기록 해서 빈 값 이 있 는 지 확인 했다 고 합 니 다.
웹 페이지 에 서 는 가방 충돌 로 인 한 것 이 라 고 하 는데, 한 가지 원인 은 오래된 poi 를 인용 한 것 이 고, 또 하 나 는 xmlbean 충돌 을 말 하 는 것 이다.
내 가 xmlbean 2.3 을 2.6 로 바 꾼 후에 이 오 류 는 사 라 졌 다.
6. 이전에 여러 번 실 행 했 지만 문제 가 없 었 고 코드 도 바 꾸 지 않 았 습 니 다. 갑자기 하루 에 실 행 했 을 때 다음 과 같은 예외 가 나 타 났 습 니 다.
java.lang.IllegalStateException: The maximum number of Cell Styles was exceeded. You can define up to 64000 style in a .xlsx Workbook
참고:https://github.com/MetadataConsulting/spreadsheet-builder/issues/8
코드 를 검사 한 결과 my Style = (XSSF CellStyle) wWorkbook. create CellStyle () 을 반복 하 는 것 을 발 견 했 습 니 다.
my style 정 의 를 for 밖으로 옮 기 고 할당 만 반복 합 니 다.여전히 틀 렸 다.
차라리 한 번 만 할당 하고 중복 사용 하 세 요.

좋은 웹페이지 즐겨찾기