2017-04-26 6 views
0

ここで私のコードは.docファイルのデータを段落に抽出し、特定の文字列検索に役立ちます。 Eclipse実行構成。しかし、1)私はそれが出力ファイルを.docファイルに変換することを欲しかった.2)出力はセルのみを指定する必要がある。HWPFDocument(.docファイル)から段落/文字列を抽出した後、excelファイルにデータを書き込む

public static void readParagraphs(HWPFDocument docx) throws Exception{ 
    we = new WordExtractor(docx); 
    String[] paragraphs = we.getParagraphText();  
    // To fetch for mode 
    for(String p: paragraphs){ 
    if(p.startsWith("MODE")) 
    System.out.println("  "+p); 
    } 
    for(String type: paragraphs){ 
    if(type.startsWith("TYPE")) 
    System.out.format("  "+type); 
    } 
    } 

予想される出力:ここ

S.no | Doc name | Title | mode   | type 
===================================================================== 
1  | laptop | A12345 | abcd 123456  | efghij A12345/123456 
2  | laptop | A12346 | abcd 123457  | efghij A12345/123457 
3  | laptop | A12347 | abcd 123458  | efghij A12345/123458 

あなたがHSSFWorkbookの私のコードの一部を見ることができます。

HSSFWorkbook workbook = new HSSFWorkbook(); 
HSSFSheet sheet = workbook.createSheet("firstsheet"); 
Row row1 = sheet.createRow((short) 0); 
row1.createCell(0).setCellValue("S.NO"); 
row1.createCell(1).setCellValue("DOC NAME"); 
row1.createCell(2).setCellValue("TITLE"); 
row1.createCell(3).setCellValue("MODE"); 
row1.createCell(4).setCellValue("TYPE"); 
Row row2 = sheet.createRow(rowNum++); 
row2.createCell(3).setCellValue(" "+mode); 
row2.createCell(4).setCellValue(" "+type); 
Row row3 = sheet.createRow(rowNum++); 
row3.createCell(3).setCellValue(" "+mode); 
row3.createCell(4).setCellValue(" "+type); 

以下の表は、ヘッダーファイル1にあります。 「A12345」のみを抽出する必要があります。

===================================== 
| xx |  A12345   |xx |  
===================================== 

以下の表は、シート2または3-6のいずれかを使用できます。各文書によって異なります。

--------------------------------------------.-------------------- 
|MODE : Abcde 123456 efghit 234567 sddsldjf 232132    | 
|----------------------------------------------------------------| 
|INFO |TYPE : efghij A12345/123456 dsflsdjflsd B22323/&123456 | 
|  |xxxxxxxxxxxxxxxxxalphanumericxxxxxxxxxxxxxxxxxxxxxxxxxx | 
----------------------------------------------------------------- 

(p.startsWith( "MODEは、"))//このメソッドは印刷する場合に役立ちます "MODEを:123456 efghit ABCDE 234567 232132 sddsldjf" 場合(type.startsWith( "TYPE"))//このメソッドは "TYPE:efghij A12345/123456 dsflsdjflsd B22323/& 123456" を印刷するのに役立ちますが、いくつかのドキュメントには 'TYPE'がありませんので、次の行を見つけるか、MODEから 'JUSTIFICATION' 'TYPE'行を取得するためのパターン認識。提案を求める。

上記の表の後に利用できるテーブルの下

----------------------------------------------------------- 
|JUSTIFICATION            | 
|----------------------------------------------------------- 
| | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | 
| | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx alphanumericxxx | 
----------------------------------------------------------- 


import java.io.FileOutputStream; 
import java.io.IOException; 
import org.apache.poi.poifs.filesystem.*; 
import org.apache.poi.sl.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.CellStyle; 
import org.apache.poi.ss.usermodel.DataFormat; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Workbook; 
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.hwpf.HWPFDocument; 
import org.apache.poi.hwpf.extractor.WordExtractor; 
import org.apache.poi.hwpf.usermodel.HeaderStories; 
import java.util.ArrayList; 
import java.util.List; 
import java.io.*; 
public class ReadDocFileFromJava { 

    public static int test = 0; 

    private static WordExtractor ex; 

     public static void main(String[] args) throws IOException { 

      List<String> fileName=new ArrayList<String>(); 


     fileName.add("C:\\1200.doc"); 
     fileName.add("C:\\1210.doc"); 
     fileName.add("C:\\1211.doc"); 
     fileName.add("C:\\1212.doc"); 
     fileName.add("C:\\1213.doc"); 
       // document 2 
     fileName.add("C:\\1214.doc"); 
     fileName.add("C:\\1215.doc"); 
     fileName.add("C:\\1216.doc"); 
     fileName.add("C:\\1217.doc"); 


     for(int i=0;i<fileName.size();i++){ 

       readMyDocument(fileName.get(i)); 
     }} 

    public static void readMyDocument(String i){ 
     POIFSFileSystem fs = null; 
     try { 
      fs = new POIFSFileSystem(new FileInputStream(i)); 

      HWPFDocument docx = new HWPFDocument(fs); 
      ex = new WordExtractor(docx); 
      readParagraphs(docx); 
      fs.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
public static void readParagraphs(HWPFDocument docx) throws Exception{ 

     int a =0,b=0,c=0,d=0,celIte=0, celIte2=0,link=0; 
     ex = new WordExtractor(docx); 
     String[] paragraphs = ex.getParagraphText(); 

     HSSFWorkbook workbook = new HSSFWorkbook(); 
     HSSFSheet sheet = workbook.createSheet("firstsheet"); 
     Row row0 = sheet.createRow(0); 
     row0.createCell(0).setCellValue("S.NO"); 
     row0.createCell(1).setCellValue("DOC NAME"); 
     row0.createCell(2).setCellValue("TITLE"); 
     row0.createCell(3).setCellValue("MODE"); 
     row0.createCell(4).setCellValue("TYPE"); 
      for(int i=1;i<=10;i++){ 
         Row row1 = sheet.createRow(i); 
       for(int j=0;j<=0;j++){ 
        Cell cell_10 =row1.createCell(j); 
        do{ 
         cell_10.setCellValue(celIte); 
         celIte++; 
        }while(celIte<1); 

        for(int k=3;k<=3;k++){ 

        Cell cell_12 = row1.createCell(k); 
        for(String p: paragraphs){ 


          if(p.startsWith("MODE")) 
         cell_12.setCellValue(""+p); 
     } } 
     workbook.write(new FileOutputStream("C:\\output.xls")); 

     workbook.close(); 

} 
       } 
     }} 

S.NO | DOC NAME | TITLE | MODE | TYPE 
========================================== 
1       XXXX 
2       XXXX 
3       XXXX 
4       XXXX 
5       XXXX 
6       XXXX 
7       XXXX 
8       XXXX 
9       XXXX 
+0

達成しようとしているものを明確にする必要があります。 1.) ''出力を出力ファイルに変換したいのですが、どこに.docファイルがあるのですか? 'それはどういう意味ですか? 2.) '出力はセルのみを指定する必要があります'どの出力とどのセルを知るのですか? – XtremeBaumer

+0

1)コードを実行するときに、コンソール出力ではなくFileOutputStreamsを使用してExcelファイルを作成する必要があります.2)plsはこれを今無視します。私はあまり明確ではない。 – vasam

+0

はい。私はそれをExcelで欲しい。私はApache POIでサポートされていないcsvを知っていました。 – vasam

答えて

0

あなたのコードビットを変更し、私は情報が欠落していますように、そのは確かにまだ働いていません。おそらくあなたは残りのコードを試みることができます

public class ReadDocFileFromJava { 

    public static int test = 0; 

    private static WordExtractor ex; 

    private static List<String[]> allParagraphs; 

    public static void main(String[] args) throws IOException { 

     List<String> fileName = new ArrayList<String>(); 

     fileName.add("C:\\1200.doc"); 
     fileName.add("C:\\1210.doc"); 
     fileName.add("C:\\1211.doc"); 
     fileName.add("C:\\1212.doc"); 
     fileName.add("C:\\1213.doc"); 
     // document 2 
     fileName.add("C:\\1214.doc"); 
     fileName.add("C:\\1215.doc"); 
     fileName.add("C:\\1216.doc"); 
     fileName.add("C:\\1217.doc"); 

     for (int i = 0; i < fileName.size(); i++) { 
      allParagraphs.add(readMyDocument(fileName.get(i))); 
     } 

    } 

    public static String[] readMyDocument(String i) { 
     POIFSFileSystem fs = null; 
     String[] paragraph; 
     try { 
      fs = new POIFSFileSystem(new FileInputStream(i)); 
      HWPFDocument docx = new HWPFDocument(fs); 
      ex = new WordExtractor(docx); 
      paragraph = ex.getParagraphText(); 
      fs.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return paragraph; 

    } 

    public static void readParagraphs(List<String[]> paragraphs) throws Exception { 

     int a = 0, b = 0, c = 0, d = 0, celIte = 0, celIte2 = 0, link = 0; 
     HSSFWorkbook workbook = new HSSFWorkbook(); 
     HSSFSheet sheet = workbook.createSheet("firstsheet"); 
     Row row = sheet.createRow(0); 
     row.createCell(0).setCellValue("S.NO"); 
     row.createCell(1).setCellValue("DOC NAME"); 
     row.createCell(2).setCellValue("TITLE"); 
     row.createCell(3).setCellValue("MODE"); 
     row.createCell(4).setCellValue("TYPE"); 
     for (int i = 1; i <= 10; i++) { 
      row = sheet.createRow(i); 
      for (int j = 0; j <= 0; j++) { 
       Cell cell_10 = row.createCell(j); 
       do { 
        cell_10.setCellValue(celIte); 
        celIte++; 
       } while (celIte < 1); 

       for (int k = 3; k <= 3; k++) { 

        Cell cell_12 = row.createCell(k); 
        for (String p : paragraphs) { 

         if (p.startsWith("MODE")) 
          cell_12.setCellValue("" + p); 
        } 
       } 
       workbook.write(new FileOutputStream("C:\\output.xls")); 

       workbook.close(); 

      } 
     } 
    } 
} 
関連する問題