Timkne
November 25, 2016, 8:49am
1
Hello,
I want to generate a excel file in a service task. For this iam using the apache poi in my eclipse. If I execute the process in my Tomcat Server iam always become a the message “Internal Server Error”.
Maybe I have a Error in my Code, Im don`t know.
Here is my code and the log file:
catalina.2016-11-25.log (231.0 KB)
Code.txt (2.0 KB)
Hi @Timkne ,
what is happening in at de.tim.speed.file.LoggerDelegate.execute(LoggerDelegate.java:40)
?
Cheers,
Askar
Timkne
November 25, 2016, 8:53am
3
public class LoggerDelegate implements JavaDelegate {
private final Logger LOGGER = Logger.getLogger(LoggerDelegate.class.getName());
@Override
public void execute(DelegateExecution execution) throws Exception {
// TODO Auto-generated method
File src=new File("E:\\Arbeitsmappe1.xlsx");
FileInputStream fis=new FileInputStream(src);
XSSFWorkbook wb=new XSSFWorkbook(fis);
XSSFSheet sheet1=wb.getSheetAt(0);
sheet1.getRow(2).createCell(3).setCellValue(99);
sheet1.getRow(3).createCell(3).setCellValue(299);
sheet1.getRow(4).createCell(3).setCellValue(399);
FileOutputStream fout=new FileOutputStream(src);
wb.write(fout);
wb.close();
LOGGER.info("\n\n ... Camunda is Working "
+ "processDefinitionId=" + execution.getProcessDefinitionId()
+ ", activtyId=" + execution.getCurrentActivityId()
+ ", activtyName='" + execution.getCurrentActivityName() + "'"
+ ", processInstanceId=" + execution.getProcessInstanceId()
+ ", businessKey=" + execution.getProcessBusinessKey()
+ ", executionId=" + execution.getId()
+ " \n\n");
}
}
@Timkne , which line is number 40?
Timkne
November 25, 2016, 9:02am
5
Sry… line Nb. 40 is between this two lines:
39 XSSFWorkbook wb=new XSSFWorkbook(fis);
40
41 XSSFSheet sheet1=wb.getSheetAt(0);
Actually, I would just write with a ServiceTask into an Excel file.
I thought the easiest way is with the apache poi.
If you can tell me or show how I do the best I would be very grateful to you.
Cheers
Check the POI docs.
You cannot get a sheet that does not exist. You should create it first.
wb.createSheet(“someSheetName”);
1 Like
Timkne
November 25, 2016, 9:35am
7
Iam tested the code in a simple java application and it works. The Excel-file is exists already but I will test it.
If the file and sheet exist already you can ignore my suggestion. Most probably he cannot read or find the existing file in that case.
Timkne
November 25, 2016, 9:43am
9
I have this simple java Application
> import java.io.File;
> import java.io.FileInputStream;
> import java.io.FileOutputStream;
> import java.util.Scanner;
> import org.apache.poi.xssf.usermodel.XSSFSheet;
> import org.apache.poi.xssf.usermodel.XSSFWorkbook;
> public class ExcelWriter {
> public static void main(String[] args) throws Exception {
> // TODO Auto-generated method stub
>
> double Wert=1;
> double Wert2=1;
> double Wert3=1;
>
>
> File src=new File("C:\\Users\\s-Knechtel.t\\Noten.xlsx");
> FileInputStream fis=new FileInputStream(src);
>
> XSSFWorkbook wb=new XSSFWorkbook(fis);
>
> XSSFSheet sheet1=wb.getSheetAt(0);
>
> sheet1.getRow(2).createCell(3).setCellValue(Wert);
> sheet1.getRow(3).createCell(3).setCellValue(Wert2);
> sheet1.getRow(4).createCell(3).setCellValue(Wert3);
>
> FileOutputStream fout=new FileOutputStream(src);
>
> wb.write(fout);
>
> wb.close();
>
> }
> }
and it work.
How can I add this in an Service Task… This is first a test, later I will write in a Excel Sheet with a Variables from a Task-Form.
try wrapping the logic in a File exist check to see if you still get the exception.
What is E: btw? A local drive or a mapped network drive?
File src=new File(“E:\Arbeitsmappe1.xlsx”);
if(src.exists()) {
// logic here
}
Timkne
November 25, 2016, 9:55am
11
Yes “E” is a network drive.
I will check your Idea
Timkne
November 25, 2016, 10:00am
12
SRC is OK. I get the same Error messages
Network drive. Checking Google, I assume that is the cause.
Looks like you cannot simply use ‘E:\’.
You should do something like
\\server_alias\somesharedfolder\Arbeitsmappe1.xlsx
or
\\192.168.12.24\somesharedfolder\Arbeitsmappe1.xlsx
Have not tried it before.
Timkne
November 25, 2016, 10:08am
14
I copy the file to my normal C-Drive and tested it.-same error.
Timkne
November 25, 2016, 10:18am
15
Is this part right?
public class LoggerDelegate implements JavaDelegate {
private final Logger LOGGER = Logger.getLogger(LoggerDelegate.class.getName());
@Override
public void execute(DelegateExecution execution) throws Exception
…
if I use this code here:
public class ExcelWriter {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
double Wert=1;
double Wert2=1;
double Wert3=1;
File src=new File("C:\\Users\\s-Knechtel.t\\Noten.xlsx");
FileInputStream fis=new FileInputStream(src);
XSSFWorkbook wb=new XSSFWorkbook(fis);
XSSFSheet sheet1=wb.getSheetAt(0);
sheet1.getRow(2).createCell(3).setCellValue(Wert);
sheet1.getRow(3).createCell(3).setCellValue(Wert2);
sheet1.getRow(4).createCell(3).setCellValue(Wert3);
FileOutputStream fout=new FileOutputStream(src);
wb.write(fout);
wb.close();
}
}
Timkne
November 25, 2016, 10:24am
16
nvanbelle:
Network drive. Checking Google, I assume that is the cause.
Looks like you cannot simply use ‘E:\’.
You should do something like
\server_alias\somesharedfolder\Arbeitsmappe1.xlsx
or
\192.168.12.24\somesharedfolder\Arbeitsmappe1.xlsx
Have not tried it before.
And if I use a local file?
Timkne
November 25, 2016, 12:51pm
17
Yes you are right, there is a problem with the path from my excel file, if I create a new excel file without path the process is working. The File is saved in the Camunda-bpm-tomcat7.5/server/apache-Tomcat-8.0.24/bin
So, Thank you very much.
But I dont know how to set a local file like this:
> File src=new File(“C:\Users\s-Knechtel.t\Noten.xlsx”);`
Thanks:+1:
Hi @Timkne
wondering if you managed to impelent a service task writing form data into an excel and if yes, how did you do it? Thanks
@DaniHorn see the details from the other thread you opened.