2016-11-02 19 views
0

私はjavaで新しくできました。実際には私はjavaを使用してExcelシートの2つの列を交換したい。コードを使用しましたが、正しい出力が得られませんでした。私は私のExcelシートのスクリーンショットを追加します。私はシステム名と日付の列を交換したい。javaを使用してExcelシートの列を交換する

enter image description here

私も誤った出力のスクリーンショットを追加します。私は2016年

enter image description here

CellStyle cellStyle1 = workbook11.createCellStyle(); 
CreationHelper createHelper1 = workbook11.getCreationHelper(); 
cellStyle1.setDataFormat(createHelper1.createDataFormat().getFormat("d-mmm")); 
try { 
    if (file11.exists()) { 
     String dt = sh1.getRow(0).getCell(1).getStringCellValue(); 
     if (!dt.equalsIgnoreCase("Date")) { 
      Iterator<Row> rowIterator1 = sh1.iterator(); 
      while (rowIterator1.hasNext()) { 
       Row row = rowIterator1.next(); 
       if (row.getCell(1).getStringCellValue().equalsIgnoreCase("Date")) { 
        Cell cl1 = row.getCell(0); 
        Cell cl2 = row.getCell(1); 
        Cell temp = row.getCell(0); 
        Cell temp1 = row.getCell(1); 
        cl1.setCellValue(temp1.getStringCellValue()); 
        cl2.setCellValue(temp.getStringCellValue()); 
       } else { 
        Cell cl1 = row.getCell(0); 
        Cell cl2 = row.getCell(1); 
        cl2.setCellType(Cell.CELL_TYPE_STRING); 
        cl1.setCellType(Cell.CELL_TYPE_STRING); 
        Cell temp = row.getCell(0); 
        Cell temp1 = row.getCell(1); 
        cl1.setCellValue(temp1.getStringCellValue()); 
        cl2.setCellValue(temp.getStringCellValue()); 
        row.getCell(1).setCellStyle(cellStyle1); 
       } 
      } 
     } 
    } 
} 

代わり1-30th 9月の1900年1月24と29を持って編集:
私は次のことを試してみたxenteros'の答えによると:

  CellStyle cellStyle1 = workbook11.createCellStyle(); 
     CreationHelper createHelper1 = workbook11.getCreationHelper(); 
     cellStyle1.setDataFormat(createHelper1.createDataFormat().getFormat("d-mmm")); 
      try { 
       if (file11.exists()) { 

        String dt = sh1.getRow(0).getCell(1).getStringCellValue(); 
        if (!dt.equalsIgnoreCase("Date")) { 
        Iterator<Row> rowIterator1 = sh1.iterator(); 
        while (rowIterator1.hasNext()) { 
        Row row = rowIterator1.next(); 
       if (row.getCell(1).getStringCellValue().equalsIgnoreCase("Date")) { 
       Cell cl1 = row.getCell(0); 
       Cell cl2 = row.getCell(1); 
       String temp = new String(cl2.getStringCellValue()); 
       cl2.setCellValue(cl1.getStringCellValue()); 
       cl1.setCellValue(temp); 
      else { 

        Cell cl1 = row.getCell(0); 
        Cell cl2 = row.getCell(1); 
        cl2.setCellType(Cell.CELL_TYPE_STRING); 
        cl1.setCellType(Cell.CELL_TYPE_STRING); 
        String temp = new String(cl2.getStringCellValue()); 
        System.out.println(temp); 
        java.util.Date temp2 = cl1.getDateCellValue(); 
        cl2.setCellStyle(cellStyle1); 
        cl2.setCellValue(temp2); 
        cl1.setCellType(Cell.CELL_TYPE_STRING); 
        cl1.setCellValue(temp); 
      } 
} 
+0

ああ、勘弁してくれよ!私はあなたのコードをbeutifulyのでフォーマットしました!なぜあなたはそれを破壊しましたか?それらの空白行は何ですか? – xenteros

+0

あなたのコードに長い説明を追加しました。あなたはそれを理解できますか?それはあなたを助けましたか、それ以上の説明が必要ですか? – xenteros

+1

コードを正しくインデントしてください。今のように、構造は推測するのが難しいです。 –

答えて

0

私はこの質問の答えを得ました。

試し{

if (file11.exists()) { 
String dt = sh1.getRow(0).getCell(1).getStringCellValue(); 
if (!dt.equalsIgnoreCase("Date")) { 
Iterator<Row> rowIterator1 = sh1.iterator(); 
while (rowIterator1.hasNext()) { 
Row row = rowIterator1.next();      
DataFormatter df = new DataFormatter();//instantiate DataFormatter class for reading the cell without changing the cell type 
Cell cl0 = row.getCell(0); 
Cell cl1 = row.getCell(1); 
CellStyle cs1 = cl0.getCellStyle(); 
CellStyle cs2 = cl1.getCellStyle(); 
String s1 = new String(df.formatCellValue(cl0));//store cell value as string 
String s2 = new String(df.formatCellValue(cl1));//store cell value as string 
cl1.setCellValue(s1);//perform swapping 
cl0.setCellStyle(cs2); 
cl1.setCellStyle(cs1);//perform swapping on formatting 
cl0.setCellValue(s2);//perform swapping 
      } 
     } 
    } else { 
     System.out.println("File does not exist.................."); 
    } 
} 
catch (Exception e) { 
     } finally { 
      FileOutputStream out = new FileOutputStream(Report_File2); 
    workbook11.write(out); 
    out.close(); 
} 
2

問題は、基本的にはJavaリファレンスまたは約swapアルゴリズムです。

Memory: 
+-------------+--------------------+--------+--------+ 
| cell 1 |  cell 2  | cell 3 | cell 4 | 
+-------------+--------------------+--------+--------+ 
| ["Date"...] | ["System name"...] |  |  | 
+-------------+--------------------+--------+--------+ 

References before step 5: 
+--------+-------+-------+-------+ 
| cl1 | cl2 | temp | temp1 | 
+--------+-------+-------+-------+ 
| cell 1 | cell2 | cell1 | cell2 | 
+--------+-------+-------+-------+ 

Memory after step 5: 
+--------------------+--------------------+--------+--------+ 
|  cell 1  |  cell 2  | cell 3 | cell 4 | 
+--------------------+--------------------+--------+--------+ 
| ["System name"...] | ["System name"...] |  |  | 
+--------------------+--------------------+--------+--------+ 
References after step 5: 
+--------+-------+-------+-------+ 
| cl1 | cl2 | temp | temp1 | 
+--------+-------+-------+-------+ 
| cell 1 | cell2 | cell1 | cell2 | 
+--------+-------+-------+-------+ 


1. Cell cl1 = row.getCell(0); 
2. Cell cl2 = row.getCell(1); 
3. Cell temp = row.getCell(0); 
4. Cell temp1 = row.getCell(1); 
5. cl1.setCellValue(temp1.getStringCellValue()); 
6. cl2.setCellValue(temp.getStringCellValue()); 

そう...瞬間、 『システム名』である値(データはセル1である)temp年代にcl2 cellValueを設定する際の手順6の結果。

以下は動作しますが、不要です。

1. Cell cl1 = row.getCell(0); 
2. Cell cl2 = row.getCell(1); 
3. String temp1 = new String(cl1.getStringCellValue()); 
4. String temp2 = new String(cl2.getStringCellValue()); 
5. cl1.setCellValue(temp2); 
6. cl2.setCellValue(temp1); 

あなたがしようとしているのは、セルの内容を入れ替えることです。セルを交換する必要はありません。あなたは何ができるかを参照してください:

1. Cell cl0 = row.getCell(0); 
2. Cell cl1 = row.getCell(1); 
3. String temp = new String(cl1.getStringValue()); 
4. cl1.setStringValue(cl0.getStringValue()); 
5. cl0.setStringValue(temp); 


1. Cell cl0 = row.getCell(0); 
2. Cell cl1 = row.getCell(1); 
3. String temp = new String(cl1.getStringValue()); 
4. java.util.Date temp2 = cl0.getDateValue(); 
5. cl1.setCellStyle(cellStyle1); 
6. cl1.setCellValue(temp2); 
7. cl0.setCellType(Cell.CELL_TYPE_STRING); 
8. cl0.setCellValue(temp); 

編集:

OPは非常に厳しいです、私はここに全体のコードを貼り付けます。

try { 
    if (file11.exists()) { 
     String dt = sh1.getRow(0).getCell(1).getStringCellValue(); 
     if (!dt.equalsIgnoreCase("Date")) { 
      Iterator<Row> rowIterator1 = sh1.iterator(); 
      while (rowIterator1.hasNext()) { 
       Row row = rowIterator1.next(); 
       if (row.getCell(1).getStringCellValue().equalsIgnoreCase("Date")) { 
        Cell cl0 = row.getCell(0); 
        Cell cl1 = row.getCell(1); 
        String temp = new String(cl1.getStringValue()); 
        cl1.setStringValue(cl0.getStringValue()); 
        cl0.setStringValue(temp); 
       } else { 
        Cell cl0 = row.getCell(0); 
        Cell cl1 = row.getCell(1); 
        String temp = new String(cl1.getStringValue()); 
        java.util.Date temp2 = cl0.getDateValue(); 
        cl1.setCellStyle(cellStyle1); 
        cl1.setCellValue(temp2); 
        cl0.setCellType(Cell.CELL_TYPE_STRING); 
        cl0.setCellValue(temp); 
       } 
      } 
     } 
    } 
} 
+0

このコードは、スワップシステム名と日付行ではなく、列です。これはすべての値を入れ替えるものではありません。 temp1とtemp2は文字列であるため、文字列が原因である可能性があります。 – abcd

+1

はい。 if文の場合のみです。 OK、コード全体を教えてあげます。 – xenteros

+1

@abcd私はちょうどelseステートメントの作業コードを追加しました。それが助けになるならば、それを解決策としてマークしてアップヴォートを与えてください。 – xenteros

関連する問題