84 lines
2.2 KiB
Go
84 lines
2.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"log"
|
||
|
"path/filepath"
|
||
|
|
||
|
"fyne.io/fyne/v2/app"
|
||
|
"fyne.io/fyne/v2/container"
|
||
|
"fyne.io/fyne/v2/dialog"
|
||
|
"fyne.io/fyne/v2/widget"
|
||
|
|
||
|
"github.com/unidoc/unioffice/document"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
// Créez une nouvelle application Fyne
|
||
|
a := app.New()
|
||
|
w := a.NewWindow("Sélectionner un dossier")
|
||
|
|
||
|
// Créez un bouton pour ouvrir le dialogue de sélection de dossier
|
||
|
btn := widget.NewButton("Sélectionner un dossier", func() {
|
||
|
dialog.ShowFolderOpen(func(cheminDossier fyne.ListableURI, err error) {
|
||
|
if cheminDossier != nil {
|
||
|
dossier := cheminDossier.Path()
|
||
|
|
||
|
// Créez un nouveau document
|
||
|
docFusionne := document.New()
|
||
|
|
||
|
// Récupérez tous les fichiers DOCX dans le dossier
|
||
|
fichiers, err := ioutil.ReadDir(dossier)
|
||
|
if err != nil {
|
||
|
log.Fatalf("Erreur lors de la lecture du dossier : %v", err)
|
||
|
}
|
||
|
|
||
|
for _, fichier := range fichiers {
|
||
|
if filepath.Ext(fichier.Name()) == ".docx" {
|
||
|
cheminFichier := filepath.Join(dossier, fichier.Name())
|
||
|
|
||
|
// Ouvrez le document existant
|
||
|
doc, err := document.Open(cheminFichier)
|
||
|
if err != nil {
|
||
|
log.Printf("Erreur lors de l'ouverture du fichier %s : %v", fichier.Name(), err)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
// Copiez le contenu du document
|
||
|
for _, para := range doc.Paragraphs() {
|
||
|
newPara := docFusionne.AddParagraph()
|
||
|
newPara.Properties().SetAlignment(para.Properties().Alignment())
|
||
|
for _, run := range para.Runs() {
|
||
|
newRun := newPara.AddRun()
|
||
|
newRun.Properties().SetBold(run.Properties().IsBold())
|
||
|
newRun.Properties().SetItalic(run.Properties().IsItalic())
|
||
|
newRun.Properties().SetUnderline(run.Properties().IsUnderline())
|
||
|
newRun.AddText(run.Text())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
doc.Close()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Enregistrez le document fusionné
|
||
|
nomFichierSortie := "fusion.docx"
|
||
|
err = docFusionne.SaveToFile(nomFichierSortie)
|
||
|
if err != nil {
|
||
|
log.Fatalf("Erreur lors de l'enregistrement du document fusionné : %v", err)
|
||
|
}
|
||
|
|
||
|
fmt.Printf("Documents fusionnés dans %s\n", nomFichierSortie)
|
||
|
}
|
||
|
}, w)
|
||
|
})
|
||
|
|
||
|
// Ajoutez le bouton à la fenêtre et affichez-la
|
||
|
w.SetContent(container.NewVBox(
|
||
|
btn,
|
||
|
))
|
||
|
|
||
|
w.ShowAndRun()
|
||
|
}
|