Grundbetrieb
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.ss.formula.EvaluationWorkbook;
import org.apache.poi.ss.formula.FormulaParser;
import org.apache.poi.ss.formula.FormulaRenderer;
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
import org.apache.poi.ss.formula.FormulaType;
import org.apache.poi.ss.formula.ptg.AreaPtg;
import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.ss.formula.ptg.RefPtgBase;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFEvaluationWorkbook;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetProtection;
/**
*Servlet, das kundenbezogene Einstellungswerte für jeden Benutzer in der Datenbank registriert
*/
public class Class01 {
/*
*Gibt eine Zelle zurück.
*
* @param args
*Linie
*/
public static void main(String[] args) {
// aaa(); //Erstellen Sie ein neues Buch
// bbb(); //Vorhandene Arbeitsmappe importieren
// blankCheck(); //Blankoscheck
rowAndColumn(); //Zeilen- und Spaltenmanipulation
// book(); //Buchbetrieb
// cell(); //Zellenbetrieb
}
public static void aaa() {
try(XSSFWorkbook book1 = new XSSFWorkbook()) {
XSSFSheet sheet1 = book1.createSheet("Blatt 01");
//Erstellen Sie ein Blatt. Blatt existiert im Ausgangszustand nicht
XSSFRow row01 = sheet1.createRow(0);
//Zeileninstanziierung. Die erste Zeile wird 0
XSSFCell cell01 = row01.createCell(0);
//Zellinstanziierung. Die erste Spalte wird 0
cell01.setCellValue("AAA"); //Zellenwert einstellen
XSSFCell cell02 = row01.createCell(1);
cell02.setCellValue("BBB");
XSSFCell cell03 = row01.createCell(2);
cell03.setCellFormula("A1&B1"); //Zellformel einstellen. Es scheint, dass "=" nicht notwendig ist
try(FileOutputStream out = new FileOutputStream("C:/work/aaa.xlsx")) {
book1.write(out);
//Ausgabe als neues Buch. Wenn Sie einen vorhandenen Dateipfad angeben, wird dieser überschrieben
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void bbb(){ //Vorhandene Arbeitsmappe importieren
try(FileInputStream input = new FileInputStream("C:/work/bbb.xlsx")){
try(XSSFWorkbook book1 = (XSSFWorkbook) WorkbookFactory.create(input)){
//* Es scheint, dass es kein Problem beim Lesen gibt, selbst wenn das Blatt geschützt ist.
XSSFSheet sheet1 = book1.getSheet("Sheet1"); //Blatt"Sheet1"Erhalten
Row row02 = sheet1.getRow(1); //Holen Sie sich die zweite Zeile
Cell cell01 = row02.getCell(0); //Holen Sie sich Zelle A1 in der zweiten Zeile
Cell cell02 = row02.getCell(1); //Holen Sie sich Zelle B1 in der zweiten Zeile
Cell cell03 = row02.getCell(2);
String str1 = cell01.getStringCellValue();
//Holen Sie sich die Zellenzeichenfolge. Beachten Sie, dass ein Lesefehler auftritt, wenn der Zellenwert ein numerischer Wert ist.
System.out.println(str1);
Double double01 = cell02.getNumericCellValue();
//Holen Sie sich die Nummer
System.out.println(double01);
try {
String str3 = cell03.getCellFormula();
//Holen Sie sich die Formel. Ein Fehler tritt auf, wenn etwas anderes als die Formel enthalten ist.
System.out.println(str3);
} catch (IllegalStateException e) {
//IllegalStateException tritt auf, wenn eine Formel aus einer Zelle abgerufen wird, die etwas anderes als eine Formel enthält
e.printStackTrace();
}
//Zellenparameter abrufen
System.out.println(cell01.getColumnIndex()); //Holen Sie sich die Spaltennummer. Beachten Sie, dass die Zahlen bei 0 beginnen
System.out.println(cell01.getRowIndex()); //Holen Sie sich die Zeilennummer. Beachten Sie, dass die Zahlen bei 0 beginnen
System.out.println(cell01.getAddress()); //Holen Sie sich die Zellenadresse. Dadurch wird die Excel-Adresse so wie sie ist erhalten
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void blankCheck(){ //Überprüfen Sie, ob die Zelle leer ist
try(FileInputStream input = new FileInputStream("C:/work/bbb.xlsx")){
try(XSSFWorkbook book1 = (XSSFWorkbook) WorkbookFactory.create(input)){
XSSFSheet sheet1 = book1.getSheet("Sheet1");
//Was ist, wenn eine leere Zelle
Row row03 = sheet1.getRow(2); //Holen Sie sich die 3. Zeile
Cell cell01 = row03.getCell(0);
Cell cell02 = row03.getCell(1);
Cell cell03 = row03.getCell(2);
if (cell01 == null || cell01.getCellType() == Cell.CELL_TYPE_BLANK) {
//Dadurch wird festgestellt, ob es leer ist. Ist eine Nullprüfung erforderlich??
System.out.println("Zelle" + cell01.getAddress() + "Ist leer");
}else{
String str1 = cell01.getStringCellValue();
System.out.println(str1);
}
if (cell02 == null || cell02.getCellType() == Cell.CELL_TYPE_BLANK) {
System.out.println("Zelle" + cell02.getAddress() + "Ist leer");
}else{
Double double01 = cell02.getNumericCellValue();
System.out.println(double01);
}
if (cell03 == null || cell03.getCellType() == Cell.CELL_TYPE_BLANK) {
System.out.println("Zelle" + cell03.getAddress() + "Ist leer");
}else{
String str4= cell03.getCellFormula();
System.out.println(str4);
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void rowAndColumn(){
try(FileInputStream input = new FileInputStream("C:/work/Reihen und Spalten.xlsx")){
try(XSSFWorkbook book1 = (XSSFWorkbook) WorkbookFactory.create(input)){
XSSFSheet sheet1 = book1.getSheet("Sheet1"); //Blatt"Sheet1"Erhalten
// Row row05 = sheet1.getRow(4); //Holen Sie sich die 5. Zeile
// row05.setZeroHeight(true);
// //Du willst dich verstecken. Bereits ausgeblendete Zeilen führen nicht zu einem Fehler
//
// Row row08 = sheet1.getRow(7);
// row08.setZeroHeight(false);
// //Versteckte Spalten erneut anzeigen. Nicht ausgeblendete Zeilen führen nicht zu einem Fehler
//
// Row row11 = sheet1.getRow(10);
// sheet1.removeRow(row11);
// //Löschte den Wert der gesamten 11. Zeile(Scheint zu sein).. Die Zeile selbst wird nicht gelöscht
// //Die Zeile selbst wird nicht gelöscht, aber es scheint, dass alle Zellenformate und Rahmen gelöscht wurden.
//
// Row row12 = sheet1.getRow(11);
// row12.setHeightInPoints(50.25F);
// //Stellen Sie die Zeilenhöhe ein. Es muss schweben. 0.Set in 25 Einheiten. Selbst wenn Sie feinere Einstellungen vornehmen, kann diese gerundet werden
//
// sheet1.shiftRows(9,14,-5);
// //Verschieben Sie die 10. bis 15. Zeile um 5 Zeilen nach oben. Möglich, auch wenn eine zusammengeführte Zelle vorhanden ist
// //Das Zellenformat und die Ränder werden ebenfalls so wie sie sind wiedergegeben
//
// book1.setForceFormulaRecalculation(true);
// //Wenn das Berechnungsergebnis der Formel aufgrund der Bewegung der Zeile oder des Löschens des Zeileninhalts merkwürdig wird, wird eine Neuberechnung wie oben empfohlen.
// ※ Row row05 = sheet1.getRow(4);Es scheint möglich zu sein, auf Zeilenbasis, aber nicht auf Spaltenbasis zu arbeiten.
sheet1.setColumnHidden(4, true); //Verstecke die 5. Spalte
sheet1.setColumnHidden(7, false); //Zeigen Sie die dritte Spalte erneut an
try(FileOutputStream out = new FileOutputStream("C:/work/Reihen und Spalten.xlsx")) {
book1.write(out);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void book(){ //Buch bezogen
try(FileInputStream input = new FileInputStream("C:/work/ccc.xlsx")){
try(XSSFWorkbook book1 = (XSSFWorkbook) WorkbookFactory.create(input)){
XSSFSheet sheet1 = book1.getSheet("Sheet1"); //Blatt"Sheet1"Erhalten
Row row01 = sheet1.getRow(0); //Holen Sie sich die erste Zeile
book1.setForceFormulaRecalculation(true); //Führen Sie eine Neuberechnung durch
try(FileOutputStream out = new FileOutputStream("C:/work/ccc.xlsx")) {
book1.write(out);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void cell(){ //Zellbezogen
try(FileInputStream input = new FileInputStream("C:/work/Zelle.xlsx")){
try(XSSFWorkbook book1 = (XSSFWorkbook) WorkbookFactory.create(input)){
XSSFSheet sheet1 = book1.getSheet("Sheet1"); //Blatt"Sheet1"Erhalten
Row row11 = sheet1.getRow(10); //Holen Sie sich Linie 11
Cell cell01 = row11.getCell(0);
Cell cell02 = row11.createCell(1); //Wenn Sie den Wert festlegen möchten, verwenden Sie createCell
// cell02.setCellFormula(cell01.getCellFormula());
//Eine Kopie der Formel. Da Sie jedoch eine Zeichenfolge erhalten können, können Sie die relative Referenzformel nicht kopieren.
copyCell2Cell(cell01,cell02,book1);
try(FileOutputStream out = new FileOutputStream("C:/work/Zelle.xlsx")) {
book1.write(out);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
Kopieren Sie die Formel als relative Referenz
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.ss.formula.EvaluationWorkbook;
import org.apache.poi.ss.formula.FormulaParser;
import org.apache.poi.ss.formula.FormulaRenderer;
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
import org.apache.poi.ss.formula.FormulaType;
import org.apache.poi.ss.formula.ptg.AreaPtg;
import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.ss.formula.ptg.RefPtgBase;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFEvaluationWorkbook;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class CellFormulaCopy {
public static void main(String[] args) {
try(FileInputStream input = new FileInputStream("C:/work/Zelle.xlsx")){
try(XSSFWorkbook book1 = (XSSFWorkbook) WorkbookFactory.create(input)){
XSSFSheet sheet1 = book1.getSheet("Sheet1"); //Blatt"Sheet1"Erhalten
Row row11 = sheet1.getRow(10); //Holen Sie sich Linie 11
Cell cell01 = row11.getCell(0);
Cell cell02 = row11.createCell(1); //Wenn Sie den Wert festlegen möchten, verwenden Sie createCell
cell02.setCellFormula(cell01.getCellFormula());
//Eine Kopie der Formel. Da Sie jedoch eine Zeichenfolge erhalten können, können Sie die relative Referenzformel nicht kopieren.
copyFormula(cell01,cell02,book1);
//Kopieren Sie die Formel als relative Referenz. Kopieren Sie die Formel von copyFormula nach cell02
try(FileOutputStream out = new FileOutputStream("C:/work/Zelle.xlsx")) {
book1.write(out);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void copyFormula(Cell srcCell, Cell destCell, XSSFWorkbook book) {
//Kopieren Sie die Formel als relative Referenz
//srcCell-Kopierquelle destCell-Kopierziel
String formula = srcCell.getCellFormula();
EvaluationWorkbook ew;
FormulaRenderingWorkbook rw;
Ptg[] ptgs;
ew = XSSFEvaluationWorkbook.create((XSSFWorkbook) book);
ptgs = FormulaParser.parse(formula, (XSSFEvaluationWorkbook) ew, FormulaType.CELL, 0);
//Ich kenne die Details nicht, aber der letzte Parameter gibt die Blattnummer ab 0 an
rw = (XSSFEvaluationWorkbook) ew;
for (Ptg ptg : ptgs) {
//Koordinatenberechnung
int shiftRows = destCell.getRowIndex() - srcCell.getRowIndex();
int shiftCols = destCell.getColumnIndex() - srcCell.getColumnIndex();
if (ptg instanceof RefPtgBase) {
RefPtgBase ref = (RefPtgBase) ptg;
if (ref.isColRelative()) {
ref.setColumn(ref.getColumn() + shiftCols);
}
if (ref.isRowRelative()) {
ref.setRow(ref.getRow() + shiftRows);
}
} else if (ptg instanceof AreaPtg) {
AreaPtg ref = (AreaPtg) ptg;
if (ref.isFirstColRelative()) {
ref.setFirstColumn(ref.getFirstColumn() + shiftCols);
}
if (ref.isLastColRelative()) {
ref.setLastColumn(ref.getLastColumn() + shiftCols);
}
if (ref.isFirstRowRelative()) {
ref.setFirstRow(ref.getFirstRow() + shiftRows);
}
if (ref.isLastRowRelative()) {
ref.setLastRow(ref.getLastRow() + shiftRows);
}
}
}
destCell.setCellFormula(FormulaRenderer.toFormulaString(rw, ptgs));
}
}
Recommended Posts