2016-06-22 11 views
0

Ich habe ein Excel-Buch, das für alle Geschäftsbenutzer freigegeben ist. Als Teil des Prozesses muss das Excel auf der Serverseite aktualisiert werden. Alle Benutzer haben ein Netzlaufwerk zugeordnet, das das Excel-Buch enthält. Früher haben wir das Excel auf der Client-Seite mit ActiveX-Controls aktualisiert. Nun ist das Problem, dass der Pfad für das Excel-Buch nicht auf dem Server-Rechner zugänglich ist und daher die Datei nicht gefunden Exception wirft. Gibt es eine Möglichkeit, dies zu handhaben, abgesehen von der Zuordnung des Netzlaufwerks auf dem Server-Rechner?Bearbeiten Sie eine Excel-Datei auf der Serverseite in einer Client-Server-Architektur

Es folgt der Code: public static String updateExcelFile (String filelocation, String DATAVAL, String txnId) throws 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"; 

Rückgabestatus; }

+0

Wann soll der serverseitige Prozess die Excel-Datei aktualisieren? – user2587106

+0

@ user2587106 auf einen Klick von der Seite klicken, gibt es einen Ajax-Anruf. Zu dieser Zeit sollte Excel aktualisiert werden. – user3611601

+0

Nun, dann senden Sie die Excel-Datei an den Server, wenn der Benutzer auf die Schaltfläche klickt. – user2587106

Antwort

0

senden die Excel an den Server-Datei, wenn der Benutzer auf die Schaltfläche klickt:

Verwendung Ajax die Datei in ein Servlet zu laden, die Servlet-Prozess die Datei und dann mit einem Link zu dem Client antworten zu der aktualisierten Datei (die sich in einem temporären Ordner auf dem Server befindet), die der Ajax dann dem Benutzer präsentieren kann.

Der Benutzer kann jetzt das Excel herunterladen und auf das Netzlaufwerk legen, wo er und andere Benutzer es direkt bearbeiten können.

Ich denke, dieser Ansatz würde erfordern, dass der Benutzer zumindest die Speicheroperation akzeptieren.

Auch dieser Ansatz schützt Sie nicht vor gleichzeitigen Updates auf dem Excel: mehrere Benutzer können den Server bearbeiten eine Kopie des Excel, und mehrere andere Benutzer können das Excel auf dem Netzlaufwerk direkt bearbeiten.

Und mit dem Server bearbeiten Sie das Excel möglicherweise ein Problem, wenn das betreffende Excel ist groß.

Nun, ich denke, ich habe die Frage beantwortet :-).

+0

kannst du mir mit passwortgeschützt helfen. Ich erhalte einen Java-Kryptographie-Erweiterungsfehler. – user3611601

+0

das ist eine andere Frage – user2587106