Modifier Microsoft-office.fichier doc en java à l'aide d'Apache POI


J'écris du code java pour réaliser les éléments suivants.

1.Lire le document Microsoft-office donné(.doc fichier.

2.Recherchez une chaîne donnée dans le fichier.

3.Supprimez la chaîne donnée située à n'importe quel endroit.

4.Insérez ou remplacez une chaîne donnée à la position spécifiée.

5.Écrivez et enregistrez le contenu du fichier mis à jour dans new .fichier doc.

J'ai écrit un code pour lire, rechercher, insérer ou remplacer, supprimer et enregistrer le fichier et cela fonctionne bien, mais je impossible de conserver le format de texte (tel que la couleur de la police, la taille de la police, la justification, le retrait gauche et droit, les styles, etc.) appliqué dans le fichier d'entrée.

N'importe qui m'aide à résoudre le problème.

Merci

Author: nagesh, 2013-05-30

3 answers

Je vais ajouter une nouvelle solution pour style document Ms-Word..

public class CreateDocumentFromScratch {

    public static void main(String[] args) {
        XWPFDocument document = new XWPFDocument();

        XWPFParagraph paragraphOne = document.createParagraph();
        paragraphOne.setAlignment(ParagraphAlignment.CENTER);
        paragraphOne.setBorderBottom(Borders.SINGLE);
        paragraphOne.setBorderTop(Borders.SINGLE);
        paragraphOne.setBorderRight(Borders.SINGLE);
        paragraphOne.setBorderLeft(Borders.SINGLE);
        paragraphOne.setBorderBetween(Borders.SINGLE);

        XWPFRun paragraphOneRunOne = paragraphOne.createRun();
        paragraphOneRunOne.setBold(true);
        paragraphOneRunOne.setItalic(true);
        paragraphOneRunOne.setText("Hello world! This is paragraph one!");
        paragraphOneRunOne.addBreak();

        XWPFRun paragraphOneRunTwo = paragraphOne.createRun();
        paragraphOneRunTwo.setText("Run two!");
        paragraphOneRunTwo.setTextPosition(100);

        XWPFRun paragraphOneRunThree = paragraphOne.createRun();
        paragraphOneRunThree.setStrike(true);
        paragraphOneRunThree.setFontSize(20);
        paragraphOneRunThree.setSubscript(VerticalAlign.SUBSCRIPT);
        paragraphOneRunThree.setText(" More text in paragraph one...");

        XWPFParagraph paragraphTwo = document.createParagraph();
        paragraphTwo.setAlignment(ParagraphAlignment.DISTRIBUTE);
        paragraphTwo.setIndentationRight(200);
        XWPFRun paragraphTwoRunOne = paragraphTwo.createRun();
        paragraphTwoRunOne.setText("And this is paragraph two.");

        FileOutputStream outStream = null;
        try {
            outStream = new FileOutputStream(args[0]);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        try {
            document.write(outStream);
            outStream.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
 1
Author: Bhushankumar Lilapara, 2013-06-05 08:51:04

Je vais vous suggérer d'utiliser la documentation Apache POI. Je vais faire quelques expériences en utilisant la documentation et en obtenant facilement le formatage du texte pour la feuille Ms-Excel..

Http://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCellStyle.html http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/BuiltinFormats.html

Je parcourais l'API quand j'ai vu la classe DataFormat et sa hiérarchie, la classe BuiltinFormats, et la setDataFormat méthode de la classe CellStyle. Tout comme quelques expérimentations, et le code ci-dessous semble fonctionner!

XSSFCellStyle textFormatStyle = book.createCellStyle(); 
textFormatStyle.setDataFormat((short)BuiltinFormats.getBuiltinFormat("text")); 
XSSFCell cell = row.createCell(columnIndex++); 
cell.setCellStyle(textFormatStyle); 

Maintenant, une fois la feuille de calcul créée, vous pouvez modifier une cellule, et lorsque vous quittez, le format reste "texte".

Je vous ai montré une autre façon avec un exemple complet.. Dans lequel je vais montrer un effet plus loin, vous pouvez ajouter selon vos besoins...

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Style example");

HSSFFont font = workbook.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
HSSFCellStyle style = workbook.createCellStyle();
style.setFont(font);

Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("This is bold");
cell.setCellStyle(style);


font = workbook.createFont();
font.setItalic(true);
style = workbook.createCellStyle();
style.setFont(font);

row = sheet.createRow(1);
cell = row.createCell(0);
cell.setCellValue("This is italic");
cell.setCellStyle(style);

try {
    FileOutputStream out = new FileOutputStream(new File("C:\\style.xls"));
    workbook.write(out);
    out.close();
    System.out.println("Excel written successfully..");

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

Ce code va générer la sortie ci-dessous:

entrez la description de l'image ici

 0
Author: Bhushankumar Lilapara, 2013-06-05 08:52:34

Vous pouvez utiliser le code suivant:

public class EditingWord{

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String filename = "path to input file/file_input_name";
        List<String> paraList = new ArrayList<String>();
        try {

            XWPFDocument doc = new XWPFDocument(OPCPackage.open(new FileInputStream(filename)));
            List<XWPFParagraph> paragraphList = doc.getParagraphs();
            for (XWPFParagraph para : paragraphList) {
                if ((para.getStyle() != null) && (para.getNumFmt() != null)) {
                    for (XWPFRun run : para.getRuns()) {
                        String text = run.text();
                        text = text.replaceAll(text, "replacement" + text);
                        run.setText(text, 0);
                    }
                }
            }
            doc.write(new FileOutputStream("path to your file/output_File_name"));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

Si vous souhaitez enregistrer votre contenu dans le même fichier, vous pouvez modifier doc.write(new FileOutputStream("path to your inpufile/input_File_name"));

 0
Author: Swapnil sharma, 2017-12-06 11:42:43