1

現在、ExcelデータをJavaのベクターにインポートしていますが、同じID(私の場合は問題番号)を持つ類似のデータがグループ化されるように、そのデータをグループ化したいと思います。

これが私の関連するインポートコードです:

 public class FileChooser extends javax.swing.JFrame {
 private String path ="";

 public FileChooser() {
 initComponents();
 }

private static Vector importExcelSheet(String fileName)
{
Vector cellVectorHolder = new Vector();
try
{
Workbook workBook = WorkbookFactory.create(new FileInputStream(fileName));
Sheet sheet = workBook.getSheetAt(0);
Iterator rowIter = sheet.rowIterator();

while(rowIter.hasNext())
{
    XSSFRow row = (XSSFRow) rowIter.next();
    Iterator cellIter = row.cellIterator();
    Vector cellStoreVector=new Vector();

    while(cellIter.hasNext())
    {
        XSSFCell cell = (XSSFCell) cellIter.next();
        cellStoreVector.addElement(cell);
    }
    cellVectorHolder.addElement(cellStoreVector);
}
}
catch (Exception e)
{
 System.out.println(e.getMessage());
}
return cellVectorHolder;
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

   JFileChooser chooser = new JFileChooser();
   chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
   int option = chooser.showOpenDialog(this); // parentComponent must a component like JFrame, JDialog...
   if (option == JFileChooser.APPROVE_OPTION) {
   File selectedFile = chooser.getSelectedFile();
   path = selectedFile.getAbsolutePath();
   jTextField1.setText(path);
  }
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

     Vector dataHolder = importExcelSheet(path);
     Enumeration e = dataHolder.elements();  // get all vector elements
     while (e.hasMoreElements()) {       // step through all vector elements
     Object obj = e.nextElement();
     System.out.println(obj);
   }// TODO add your handling code here:

}

これにより、Excelスプレッドシートが選択され、すべての値がベクトルに抽出されて出力されます。知りたいのは、同じデータをベクトルにグループ化して、全体ではなくそのデータを出力できるかどうかです。

それで、私が携帯電話の契約のスプレッドシートを持っていて、すべての契約ではなく、Samsung Galaxy s3のすべての契約を選択したいとしましょう、どうすればよいですか?

4

1 に答える 1

0

あなたはオブジェクト拒否に苦しんでいます:-)

私があなたのコードを読んでいるとき、あなたはVector列のベクトルを含む行を持っています、それは正しいですか?もしそうなら、列の1つに電話モデルが含まれていますか?

とにかく、あなたは次の線に沿って何かをしている可能性があります:

// TODO seriously consider something else than Vector to store the rows and columns!
Map<String,Vector> map = new HashMap<String,Vector>()

while(rowIter.hasNext())
{
    boolean isFirst = false;
    String phoneModel = "";
    while( cellIter.hasNext() )
    {
        XSSFCell cell = (XSSFCell) cellIter.next();
        if ( isFirst ) { phoneModel = cell.getTheTextContentOrWhatever(); isFirst = false; }
        cellStoreVector.addElement(cell);
    }
    if ( map.get( phoneModel ) == null ) { map.put( phoneModel , new Vector() ); }
    map.get( phoneModel ).add( cellStoreVector );
}

次に、マップキーが電話になり、値はVectorその電話の行とともになります。それは私がきれいなコードだと思っているものではなく、エラー処理の観点からは機能する必要がありますが、そこから作業することができます。

乾杯、

于 2013-02-27T09:17:34.523 に答える