2016-06-22 17 views
0

すべてのビジネスユーザーで共有されているExcelブックがあります。このプロセスの一環として、サーバー側でExcelを更新する必要があります。すべてのユーザーは、Excelブックを含むネットワークドライブにマップされています。以前は、ActiveXコントロールを使用してクライアント側のExcelを更新していました。今問題は、Excelの本のパスがサーバマシン上でアクセスできないため、例外ファイルが見つからないということです。これとは別にサーバーマシン上のネットワークドライブをマッピングする方法はありますか? クライアントサーバーアーキテクチャのサーバー側でExcelファイルを編集

後はコードである: パブリック静的な文字列updateExcelFile(文字列のFileLocation、文字dataVal、列txnId)にIOException {

String status=""; 
//fileLocation = "Z:\\check.xlsx"; 
//FileInputStream file = new FileInputStream(new File("C:\\JXL\\Checklist OnBoarding1.1.xlsx")); 

//fileLocation.rep 
FileInputStream file = new FileInputStream(new File(fileLocation)); 
XSSFWorkbook wb = new XSSFWorkbook (file); 
XSSFSheet sheet = wb.getSheetAt(0); 

Row r = null; 
Cell c = null; 


String data[] = dataVal.split(","); 


int rowCount = sheet.getPhysicalNumberOfRows(); 

int rowNum = rowCount; 

Iterator<Row> rowInterator =sheet.iterator(); 
while(rowInterator.hasNext()){ 
    r=rowInterator.next(); 

    Iterator<Cell> cellIterator = r.cellIterator(); 
    while(cellIterator.hasNext()){ 

     c=cellIterator.next(); 
     //System.out.println(); 
     switch(c.getCellType()) { 

     case Cell.CELL_TYPE_NUMERIC: 
      System.out.print(c.getNumericCellValue() + "\t\t"); 
      if(c.getNumericCellValue()==Integer.parseInt(txnId)){ 
       int modRow = r.getRowNum(); 
       System.out.println("ModRow"+modRow); 
       rowNum=modRow; 
      } 
      break; 
     case Cell.CELL_TYPE_STRING: 
      System.out.print(c.getStringCellValue() + "\t\t"); 
      if(c.getStringCellValue().equals(txnId)){ 
       int modRow = r.getRowNum(); 
       System.out.println("ModRow"+modRow); 
       rowNum=modRow; 
      } 
      break; 
    } 



    } 
} 


if(rowNum==rowCount){ 
    r=sheet.createRow(rowNum+1); 
    r=sheet.getRow(rowNum+1); 
}else{ 
    r=sheet.getRow(rowNum); 
} 



for(int cellNum =0; cellNum<data.length;cellNum++){ 

    c=r.createCell(cellNum); 
    c.setCellValue(data[cellNum]); 
} 

file.close(); 


//FileOutputStream outFile =new FileOutputStream(new File("C:\\JXL\\Checklist OnBoarding1.1.xlsx")); 
FileOutputStream outFile =new FileOutputStream(new File(fileLocation)); 
wb.write(outFile); 
outFile.close(); 
status="success"; 

リターン・ステータスをスロー。 }

+0

サーバー側のプロセスがいつExcelファイルを更新するのですか? – user2587106

+0

@ user2587106ボタンからクリックすると、ajax呼び出しがあります。その時、Excelは更新されるべきです。 – user3611601

+0

を入力し、ユーザーがボタンをクリックすると、Excelファイルをサーバーに送信します。 – user2587106

答えて

0

ユーザーがボタンをクリックすると、サーバーにExcelファイルを送信します。サーブレットにファイルをアップロードする

使用アヤックスを、 は、サーブレット・プロセスにファイルを持っているし、その後リンクでクライアントへの応答更新されたファイル(サーバー上の一時フォルダに格納されています)に送信し、ajaxはそのファイルをユーザーに提示します。

ユーザーはエクセルをダウンロードしてネットワークドライブに置くことができ、そこで彼や他のユーザーが直接編集することができます。

このアプローチでは、少なくとも保存操作を受け入れる必要があると思います。

このアプローチでは、Excel上の同時更新からユーザーを保護することはできません。複数のユーザーがサーバーにExcelのコピーを編集させ、ネットワークドライブ上のExcelを直接編集できます。

問題のExcelが大きい場合は、サーバーを編集すると問題が発生する可能性があります。

私は質問に答えました:-)。

+0

パスワードで保護された優れたサービスをお手伝いします。私はいくつかのJava暗号拡張エラーを取得しています。 – user3611601

+0

これは別の質問です – user2587106

関連する問題