[JAVA] Ersetzen Sie Text in der AutoShape of Excel-Datei durch Apache POI

Ersetzen Sie Text in der AutoShape of Excel-Datei durch Apache POI

Annahme

――Es fasst die Inhalte zusammen, die durch Ausprobieren funktioniert haben --Excel-Dateien sind für das XLSX-Format vorgesehen

Grenzen

――Es kann nicht unterstützt werden, wenn jedes Zeichen in einer Zeichenfolge anders formatiert ist.

Code

Ich habe den Code auch auf Github gesetzt.

https://github.com/sadapon2008/autoshape-text-replace

src/main/java/sadapon2008/Application.java


package sadapon2008;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFShape;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFSimpleShape;
import org.apache.poi.xssf.usermodel.XSSFTextParagraph;
import org.apache.poi.xssf.usermodel.XSSFTextRun;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;

public class Application {

	public static void main(String[] args) {
		//Überprüfen und Abrufen von Befehlszeilenargumenten
		if (args.length < 4) {
			System.exit(1);
		}
		//Zu ersetzende Zeichenfolge
		String textTarget = args[0];
		//Zeichenkette nach dem Ersetzen
		String textReplacement = args[1];
		//Ersetzt werden.xlsx-Datei
		String filenameSrc = args[2];
		//Erstellt nach dem Austausch.xlsx-Datei
		String filenameDest = args[3];
		
		try {
			//Kopieren Sie die Ausgabezieldatei und schreiben Sie sie neu
			Files.copy(Paths.get(filenameSrc), Paths.get(filenameDest), StandardCopyOption.REPLACE_EXISTING);
			OPCPackage pkg = OPCPackage.open(new FileInputStream(filenameDest));
			XSSFWorkbook workBook = new XSSFWorkbook(pkg);
			//Prozess pro Blatt
			int n = workBook.getNumberOfSheets();
			for (int i = 0; i < n; i++) {
				XSSFSheet sheet = workBook.getSheetAt(i);
				XSSFDrawing drawing = sheet.createDrawingPatriarch();
				//Prozess durch automatische Formgebung
				for (XSSFShape shape : drawing.getShapes()) {
					if (!(shape instanceof XSSFSimpleShape)) {
						//Nicht kompatibel mit gruppierten automatischen Formen
						continue;
					}
					//Griff für nicht gruppierte Autoshapes
					XSSFSimpleShape simpleShape = (XSSFSimpleShape)shape;
					CTTextBody textBody = simpleShape.getCTShape().getTxBody();
					if (null == textBody) {
						continue;
					}
					for (XSSFTextParagraph textParagraph : simpleShape.getTextParagraphs()) {
						for (XSSFTextRun textRun : textParagraph.getTextRuns()) {
							//Ersetzen Sie den Text der formatierten Einheit
							//Daher wird es nicht unterstützt, wenn die Formateinstellung für jedes Zeichen unterschiedlich ist.
							textRun.setText(textRun.getText().replace(textTarget, textReplacement));
						}
					}
				}
			}
			FileOutputStream fileOut = new FileOutputStream(filenameDest);
			workBook.write(fileOut);
			fileOut.close();
			workBook.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Beispiel erstellen und ausführen

Verwenden Sie beim Erstellen mit Gradle build.gradle wie unten gezeigt.

build.gradle


apply plugin: 'java'
apply plugin:'application'

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

mainClassName = 'sadapon2008.Application'

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.apache.poi', name: 'poi', version: '3.15'
    compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.15'

    testCompile 'junit:junit:4.12'
}

run {
    if (project.hasProperty("appArgs")) {
        args Eval.me(appArgs)
    }
}

Führen Sie dann mit gradlew Folgendes aus.

./gradlew run -PappArgs="['Vor dem Austausch','Nach dem Austausch','input.xlsx','output.xlsx']"

Recommended Posts

Ersetzen Sie Text in der AutoShape of Excel-Datei durch Apache POI
Bearbeiten Sie Excel mit Apache POI
Apache POI Excel mit Kotlin
[Java] Behandeln Sie Excel-Dateien mit Apache POI
[Java] Erstellen einer Excel-Datei mit Apache POI
[Apache POI] Entsprechende Excel-Version
Excel-Operation mit Apache POI
Ausgabe nach Excel mit Apache POI!
Beispiel für eine EXCEL-Dateiaktualisierung mit JAVA
Mit dbunit 2.6.0 kommt poi ohne Erlaubnis herein
Lesen Sie die xlsx-Datei in Java mit Selenium
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Textextraktion in Java aus PDF mit pdfbox-2.0.8