[JAVA] Remplacer le texte dans la forme automatique du fichier Excel par Apache POI

Remplacer le texte dans la forme automatique du fichier Excel par Apache POI

supposition

――Il résume le contenu qui a fonctionné par essais et erreurs

Limites

――Il ne peut pas être pris en charge si chaque caractère est formaté différemment dans une chaîne de caractères.

code

J'ai également mis le code sur Github.

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) {
		//Vérification et obtention des arguments de ligne de commande
		if (args.length < 4) {
			System.exit(1);
		}
		//Chaîne de caractères à remplacer
		String textTarget = args[0];
		//Chaîne de caractères après remplacement
		String textReplacement = args[1];
		//Être remplacé.fichier xlsx
		String filenameSrc = args[2];
		//Créé après remplacement.fichier xlsx
		String filenameDest = args[3];
		
		try {
			//Copiez le fichier de destination de sortie, puis réécrivez-le
			Files.copy(Paths.get(filenameSrc), Paths.get(filenameDest), StandardCopyOption.REPLACE_EXISTING);
			OPCPackage pkg = OPCPackage.open(new FileInputStream(filenameDest));
			XSSFWorkbook workBook = new XSSFWorkbook(pkg);
			//Processus par feuille
			int n = workBook.getNumberOfSheets();
			for (int i = 0; i < n; i++) {
				XSSFSheet sheet = workBook.getSheetAt(i);
				XSSFDrawing drawing = sheet.createDrawingPatriarch();
				//Processus par forme automatique
				for (XSSFShape shape : drawing.getShapes()) {
					if (!(shape instanceof XSSFSimpleShape)) {
						//Non compatible avec les formes automatiques groupées
						continue;
					}
					//Poignée pour les formes automatiques non groupées
					XSSFSimpleShape simpleShape = (XSSFSimpleShape)shape;
					CTTextBody textBody = simpleShape.getCTShape().getTxBody();
					if (null == textBody) {
						continue;
					}
					for (XSSFTextParagraph textParagraph : simpleShape.getTextParagraphs()) {
						for (XSSFTextRun textRun : textParagraph.getTextRuns()) {
							//Remplacez le texte de l'unité formatée
							//Par conséquent, il n'est pas pris en charge lorsque le paramètre de format est différent pour chaque caractère.
							textRun.setText(textRun.getText().replace(textTarget, textReplacement));
						}
					}
				}
			}
			FileOutputStream fileOut = new FileOutputStream(filenameDest);
			workBook.write(fileOut);
			fileOut.close();
			workBook.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Exemple de construction et d'exécution

Lors de la construction avec gradle, utilisez build.gradle comme indiqué ci-dessous.

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)
    }
}

Puis exécutez ce qui suit avec gradlew.

./gradlew run -PappArgs="['Avant le remplacement','Après remplacement','input.xlsx','output.xlsx']"

Recommended Posts

Remplacer le texte dans la forme automatique du fichier Excel par Apache POI
Manipuler Excel avec Apache POI
Apache POI Excel avec Kotlin
[Java] Gérer les fichiers Excel avec Apache POI
[Java] Création d'un fichier Excel à l'aide d'Apache POI
[Apache POI] Version Excel correspondante
Opération Excel avec Apache POI
Sortie vers Excel en utilisant Apache POI!
Exemple de mise à jour de fichier EXCEL avec JAVA
Avec dbunit 2.6.0, poi arrive sans permission
Lire le fichier xlsx en Java avec Selenium
Lire une chaîne dans un fichier PDF avec Java
Extraction de texte en Java à partir de PDF avec pdfbox-2.0.8