Hallo zusammen,
ich habe durch langes suchen und ausprobieren leider nicht das gewünschte Ergebnis zu meinem derzeitigen Hindernis gefunden. Deshalb hoffe ich, dass ihr mir weiterhelfen könnt.
Folgende Schwierigkeit liegt vor:
Ich habe mithilfe von Java ein Excelfile erstellt und übertrage Daten eines csv-Files in das erstellte xlsx-File. Nun möchte ich die letzte Spalte dieses Excelfile herausfinden und dort Formeln bezogen auf die übertragenen Daten eintragen. Doch ich bekomme es nicht hin das ich meinen Zeiger auf diese Stelle bekomme und etwas eintragen kann.
Hier also meine Fragen:
Wie findet man mithilfe von Java die letzte Spalte in einem Excelfile?
Wie fügt man Formeln ein damit sie auch gleich berechnet werden und nicht nur wie ein String dann drinstehen?
Dann hätte ich noch kurz eine Bitte um einen Tipp:
Und zwar sollte ich das Einfügen der Formeln in der gleichen Methode unterbringen oder sollte ich eine neue dafür schreiben?
Code:
ich habe durch langes suchen und ausprobieren leider nicht das gewünschte Ergebnis zu meinem derzeitigen Hindernis gefunden. Deshalb hoffe ich, dass ihr mir weiterhelfen könnt.
Folgende Schwierigkeit liegt vor:
Ich habe mithilfe von Java ein Excelfile erstellt und übertrage Daten eines csv-Files in das erstellte xlsx-File. Nun möchte ich die letzte Spalte dieses Excelfile herausfinden und dort Formeln bezogen auf die übertragenen Daten eintragen. Doch ich bekomme es nicht hin das ich meinen Zeiger auf diese Stelle bekomme und etwas eintragen kann.
Hier also meine Fragen:
Wie findet man mithilfe von Java die letzte Spalte in einem Excelfile?
Wie fügt man Formeln ein damit sie auch gleich berechnet werden und nicht nur wie ein String dann drinstehen?
Dann hätte ich noch kurz eine Bitte um einen Tipp:
Und zwar sollte ich das Einfügen der Formeln in der gleichen Methode unterbringen oder sollte ich eine neue dafür schreiben?
Code:
Java:
package testconvert;
//alle benötigten imports
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class CSVToExcelConverter{
public void CsvToXlsx(String fileName) throws IOException //diese Methode erstellt ein xlsx-File und schreibt die benötigten Daten zuerst einmal hinein, um sie danach mit bestimmten Formeln zu unterziehen, und Diagramme dazu zu erstellen
{
// Hier werden alle benötigten Variablen initialisiert
ArrayList arList=null; //arList wird auf null gesetzt
ArrayList al=null; //al wird auf null gesetzt
String fName = /*inDirectory als Variable einfügen*/"D:\\test.csv"; //Später ist dies die Variable zur Auswahl der Dokumente die ausgewertet werden sollen
String thisLine; //thisLine wird als String festgelegt
int count=0; //count wird als integer initialisiert und auf 0 gesetzt
FileInputStream fis = new FileInputStream(fName); //fis erhält die Werte die im String fName stehen
DataInputStream myInput = new DataInputStream(fis); //myInput erhält die Werte die in fis stehen
int i=0; //i wird als integer initalisiert und auf 0 gesetzt
arList = new ArrayList(); //eine neue ArrayList vom Typ arList wird erstellt
//Hier werden die Daten bei ; gesplittet
while ((thisLine = myInput.readLine()) != null) //es wird solange gelesen bis die letzte Zeile erreicht ist
{
al = new ArrayList(); //eine neue ArrayList vom Typ al wird erstellt
String strar[] = thisLine.split(";"); //die eingelesenen Zeilen werden bei ";" gesplittet und im String-Array strar gespeichert
for(int j=0;j<strar.length;j++)
{
al.add(strar[j]); //die einzelnen Werte des String-Arrays strar werden zur ArrayList al hinzugefügt
} //die for-Schleife endet hier
arList.add(al); //die Werte der ArrayList al werden der ArrayList arList hinzugefügt
System.out.println();
i++;
} //die while-Schleife endet hier
// Hier wird versucht die Zeilen einzulesen
try
{
XSSFWorkbook wb = new XSSFWorkbook(); //ein XSSFWorkbook mit dem Namen wb wird erstellt
XSSFSheet dsheet = wb.createSheet("Diagramm"); //eine Tabelle im XSSFWorkbook wb mit dem Namen Diagramm wird erstellt
XSSFSheet msheet = wb.createSheet("Metadaten"); //eine Tabelle im XSSFWorkbook wb mit dem Namen Metadaten wird erstellt
for(int k=0;k<arList.size();k++)
{
ArrayList ardata = (ArrayList)arList.get(k); //es wird eine ArrayList mit dem Namen ardata erstellt und es wird ein getter zur ArrayList arList erstellt
XSSFRow row = msheet.createRow((short) 0+k); //hier werden die Spalten für die Tabelle msheet gebildet
for(int p=0;p<ardata.size();p++) //die for-Schleife wird benutzt um den Spalten die genau Anzahl von Zeilen zuzuordnen
{
XSSFCell cell = row.createCell((short) p); //hier werden die Zeilen für die Tabelle msheet gebildet
System.out.println(cell.getColumnIndex()); //gibt aus in welcher Zeile der Zeiger steht
String data = ardata.get(p).toString(); //String data wird erstellt um die einzelnen Werte der ArrayList ardata zu schreiben
if(data.startsWith("=")) //if-Bedingung erfüllt wenn data mit einem "=" beginnt
{
cell.setCellType(Cell.CELL_TYPE_STRING); //Cell-Typ wird auf String gesetzt
data=data.replaceAll("\"", ""); // \ wird mit einer Leertaste ersetzt
data=data.replaceAll("=", ""); // = wird mit einer Leertaste ersetzt
cell.setCellValue(data); //die Werte der Variablen data werden nach und nach in die Zeilen geschrieben
} //if-Bedingung endet
else if(data.startsWith("\""))//else-if-Bedingung erfüllt wenn data mit "\"" beginnt
{
data=data.replaceAll("\"", ""); // \" wird mit einer Leertaste ersetzt
cell.setCellType(Cell.CELL_TYPE_STRING); //Cell-Typ wird auf String gesetzt
cell.setCellValue(data); //die Werte der Variablen(vom Typ String) data werden nach und nach in die Zeilen geschrieben
} //else-if-Bedingung endet
else{ //für sonstige Bedingungen
data=data.replaceAll("\"", "");
cell.setCellType(Cell.CELL_TYPE_NUMERIC); //Cell-Typ wird auf Numeric gesetzt
cell.setCellValue(data); //die Werte der Variablen(vom Typ Numeric) data werden nach und nach in die Zeilen geschrieben
} //else-Bedingung endet
} //for-Schleife endet
} //for-Schleife endet
FileOutputStream fileOut = new FileOutputStream(/*outDirectory als Variable einfügen*/"D:\\" + fileName + ".xlsx");
wb.write(fileOut); //das geschriebene XSSFWorkbook wb wird unter dem Dateiname fileName.xlsx gespeichert
fileOut.close(); //zuletzt wird das File geschlossen
System.out.println("Your excel file has been generated"); //Dies ist die Meldung falls das File erfolgreich erstellt und geschrieben wurde
} //try-Schleife endet
//zum fangen von auftretenden Fehlern
catch ( Exception ex ) {
ex.printStackTrace();
} //catch-Bedingung endet
} //CsvToXlsx method wird geschlossen
} //Converter class wird geschlossen
Zuletzt bearbeitet von einem Moderator: