2014-12-24 6 views
-2

그래서, 이것이 제 일입니다. Java의 MapDB 데이터베이스에 대한 많은 양의 데이터가 있습니다. 스프레드 시트를 만들어서 Google 워드 프로세서로 가져와야합니다.자바로 방대한 스프레드 시트를 작성하는 방법은 무엇입니까?

스프레드 시트에는 약 2,000 만 개의 행과 3000 개의 열이 있으며 각 행과 열이 만나는 곳에 정수 값의 배열이 있습니다 (일부 배열은 비어 있거나 널입니다). 따라서 약 600 억 개의 어레이가 있습니다.

DB를 반복해야하고 DB를 반복하면서 스프레드 시트의 각 행 - 열 쌍이 결정됩니다.

어떻게해야합니까? 어떤 파일 형식을 사용합니까, 아니면 어떻게해야합니까? 감사.

편집 :

아이디어가 있습니다. 행 - 열 조합을 키로, 정수 배열을 값으로 보유하는 새로운 MapDB 파일을 만들 수있었습니다.

static class RowColumn implements Serializable 
{ 
    final String row; 
    final String column; 

    public RowColumn(String r, String c) 
    { 
     row = r; 
     column = c; 
    } 
} 

public static void main(String[] args) 
{ 
    DB thedb = DBMaker.newTempFileDB().make(); 

    HTreeMap<RowColumn, Integer[]> spreadsheetMap = thedb.getHashMap("spreadsheet"); 

    //do some stuff here to iterate through last DB and get data 
    // 
    //stuff... 
} 

일단 내가 이것을 갖게되면 그것을 반복하고 스프레드 시트를 만들 수 있습니다. 그러나 Google 스프레드 시트로 가져올 수있는 형식으로 스프레드 시트를 작성하려면 어떻게해야합니까?

EDIT2 :

아니면 HTreeMap 너무 많은 키 - 값 쌍으로 실패 할 수 있기 때문에 대신 BTreeMap를 사용 하는가?

+0

것은 한 번 봐 마이크로 소프트 오픈 포맷의 스프레드 시트를 작성하는 아파치 POI를 사용하여 예제 재스퍼 리포트 (JasperReports), 프로세스가 더 간단해질 수 있습니다. – MadProgrammer

+0

스프레드 시트 작성 방법 : 가능한 모든 코드 더미로 시작하십시오. spreadhseet처럼 보이지 않는 모든 것을 개척하십시오. – RobP

+0

세포를위한 배열을 가진 스프레드 시트에는 어떤 종류가 있습니까? 그리고 시트의 60B 셀을 지원하는 스프레드 시트는 어떤 종류입니까? Excel 2007조차도 16B 만 지원하며 16K x 1M 배열입니다. – Gabe

답변

1

원하는 스프레드 시트 유형은 무엇입니까? 어떤 형식입니까?

  1. Apache POI

  2. jXLS

  3. jOpenDocument

  4. Google API through GData
:

과 같은 스프레드 시트를 작성하는 라이브러리가있다

결과 스프레드 시트가 크다면 이런 종류의 라이브러리를 사용하지 말고 CSV와 같은 형식을 고려해야합니다 (일반 DB 덤프). 그리고 형식에 대한 자유가 있다면 ods 나 xlsx와 같은 공개 형식을 제안 할 것입니다.

스프레드 시트는 DB를 대체하지 않으며 2 천만 행으로 생성하려고하지 않으며 대부분의 앱 (전부는 아닐 경우)이 열 수 없게됩니다.

용도는 무엇입니까? 백업을 만드시겠습니까? 생성 된 문서는 사용자 또는 애플리케이션에 의해 소비 (열리거나 처리)됩니까?

편집 :

여기에 (당신이 다음 업로드하고 구글 문서 도구의 파일로 작업 할 수 있습니다)

public void method() throws IOException { 
    // your spreadsheet workbook 
    org.apache.poi.xssf.streaming.SXSSFWorkbook wb = new org.apache.poi.xssf.streaming.SXSSFWorkbook(); 
    wb.setCompressTempFiles(true);   
    org.apache.poi.xssf.streaming.SXSSFSheet sheet = (org.apache.poi.xssf.streaming.SXSSFSheet) wb.createSheet(); 
    sheet.setRandomAccessWindowSize(100);// keep 100 rows in memory, exceeding rows will be flushed to disk 

    // here you will iterate over your collection and store what you need on the sheet 
    int rowsToWrite = 3000; 
    for (int rowIndex = 0; rowIndex < rowsToWrite; rowIndex++) { 
     int[] cellContent = null; 
     org.apache.poi.ss.usermodel.Row row = sheet.createRow(rowIndex); 
     for (int columnIndex = 0; columnIndex < 1; columnIndex++) { 
      row.createCell(columnIndex).setCellValue(Arrays.toString(cellContent)); 
     } 
    } 
    // save your workbook to some file 
    FileOutputStream out = new FileOutputStream("yourfilename.xlsx"); 
    wb.write(out); 
    out.close(); 
} 
+0

몇 가지 목적이 있습니다. 주된 목적은 멋지게 보이기 때문이며,이 데이터를 보는 것이 꽤 흥미로울 것입니다. 두 번째 이유는 통계적 분석을위한 이유이므로 서로 다른 데이터 집합 간의 겹침을 시각화 할 수 있습니다. 이것은 데이터베이스를 대체하지 않으며, 나는 무엇이 진행되고 있는지 시각적으로 볼 수 있기를 원합니다. – l2u7

+3

"시각적으로 무슨 일이 벌어지는 지 보시오"? 600 억 항목의 데이터를 보면? 나는 네가 아직 젊었 으면 좋겠어. –

+0

메모에 중요 할만한 다른 것, 내가 내 게시물에 대한 의견에 진술했다. 가능한 행 - 열 쌍은 3000 개에 지나지 않으며 3000 개의 행 - 열 쌍으로 나뉘어 진 총 2000 만 개의 정수가있을 수 있습니다. 나머지 행 - 열 쌍은 널 항목입니다. 그리고 정말로 필요하다면 배열을 생략 할 수 있습니다. 데이터의 유일한 중요한 부분은 배열의 크기입니다. 따라서 스프레드 시트가 정수 배열을 보유하는 대신 행 - 열 쌍이 데이터베이스에서 발생하는 발생 횟수를 나타내는 단일 정수 만있을 수 있습니다. – l2u7