Table des matières
Installé via NuGet
PM> Install-Package Spire.Office
Liens connexes
Word et Excel sont deux types de fichiers complètement différents. Les documents Word sont utilisés pour rédiger des essais, des lettres ou créer des rapports, tandis que les documents Excel sont utilisés pour enregistrer des données sous forme de tableau, créer des graphiques ou effectuer des calculs mathématiques. Il n'est pas recommandé de convertir un document Word complexe en feuille de calcul Excel car Excel peut difficilement restituer le contenu selon sa mise en page d'origine dans Word.
Toutefois, si votre document Word est principalement composé de tableaux et que vous souhaitez analyser les données du tableau dans Excel, vous pouvez utiliser Spire.Office for .NET pour convertir Word en Excel alors que conservant une bonne lisibilité.
Installer Spire.Office for .NET
Pour commencer, vous devez ajouter les fichiers DLL inclus dans le package Spire.Office for .NET en tant que références dans votre projet .NET. Les fichiers DLL peuvent être téléchargés depuis ce lien ou installé via NuGet.
PM> Install-Package Spire.Office
Convertir Word en Excel en C# et VB.NET
Ce scénario utilise en fait deux bibliothèques dans le package Spire.Office. Ce sont Spire.Doc for .NET et Spire.XLS for .NET. Le premier est utilisé pour lire et extraire le contenu d'un document Word, et le second est utilisé pour créer un document Excel et écrire des données dans les cellules spécifiques. Pour rendre cet exemple de code facile à comprendre, nous avons créé les trois méthodes personnalisées suivantes qui exécutent des fonctions spécifiques.
- ExportTableInExcel() - Exporte les données d'un tableau Word vers des cellules Excel spécifiées.
- CopyContentInTable() - Copie le contenu d'une cellule de tableau dans Word vers une cellule Excel.
- CopyTextAndStyle() - Copie du texte avec mise en forme d'un paragraphe Word vers une cellule Excel.
Les étapes suivantes montrent comment exporter des données d'un document Word entier vers une feuille de calcul à l'aide de Spire.Office for .NET.
- Créez un objet Document pour charger un fichier Word.
- Créez un objet Worbbook et ajoutez-y une feuille de calcul nommée "WordToExcel".
- Parcourez toutes les sections du document Word, parcourez tous les objets de document sous une certaine section, puis déterminez si un objet de document est un paragraphe ou un tableau.
- Si l'objet document est un paragraphe, écrivez le paragraphe dans une cellule spécifiée dans Excel à l'aide de la méthode CoypTextAndStyle().
- Si l'objet document est un tableau, exportez les données du tableau de Word vers des cellules Excel à l'aide de la méthode ExportTableInExcel().
- Ajustez automatiquement la hauteur de ligne et la largeur de colonne dans Excel afin que les données d'une cellule ne dépassent pas la limite de la cellule.
- Enregistrez le classeur dans un fichier Excel à l'aide de la méthode Workbook.SaveToFile().
- C#
- VB.NET
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using Spire.Xls; using System; using System.Drawing; namespace ConvertWordToExcel { class Program { static void Main(string[] args) { //Create a Document object Document doc = new Document(); //Load a Word file doc.LoadFromFile(@"C:\Users\Administrator\Desktop\Invoice.docx"); //Create a Workbook object Workbook wb = new Workbook(); //Remove the default worksheets wb.Worksheets.Clear(); //Create a worksheet named "WordToExcel" Worksheet worksheet = wb.CreateEmptySheet("WordToExcel"); int row = 1; int column = 1; //Loop through the sections in the Word document foreach (Section section in doc.Sections) { //Loop through the document object under a certain section foreach (DocumentObject documentObject in section.Body.ChildObjects) { //Determine if the object is a paragraph if (documentObject is Paragraph) { CellRange cell = worksheet.Range[row, column]; Paragraph paragraph = documentObject as Paragraph; //Copy paragraph from Word to a specific cell CopyTextAndStyle(cell, paragraph); row++; } //Determine if the object is a table if (documentObject is Table) { Table table = documentObject as Table; //Export table data from Word to Excel int currentRow = ExportTableInExcel(worksheet, row, table); row = currentRow; } } } //Auto fit row height and column width worksheet.AllocatedRange.AutoFitRows(); worksheet.AllocatedRange.AutoFitColumns(); //Wrap text in cells worksheet.AllocatedRange.IsWrapText = true; //Save the workbook to an Excel file wb.SaveToFile("WordToExcel.xlsx", ExcelVersion.Version2013); } //Export data from Word table to Excel cells private static int ExportTableInExcel(Worksheet worksheet, int row, Table table) { CellRange cell; int column; foreach (TableRow tbRow in table.Rows) { column = 1; foreach (TableCell tbCell in tbRow.Cells) { cell = worksheet.Range[row, column]; cell.BorderAround(LineStyleType.Thin, Color.Black); CopyContentInTable(tbCell, cell); column++; } row++; } return row; } //Copy content from a Word table cell to an Excel cell private static void CopyContentInTable(TableCell tbCell, CellRange cell) { Paragraph newPara = new Paragraph(tbCell.Document); for (int i = 0; i < tbCell.ChildObjects.Count; i++) { DocumentObject documentObject = tbCell.ChildObjects[i]; if (documentObject is Paragraph) { Paragraph paragraph = documentObject as Paragraph; foreach (DocumentObject cObj in paragraph.ChildObjects) { newPara.ChildObjects.Add(cObj.Clone()); } if (i < tbCell.ChildObjects.Count - 1) { newPara.AppendText("\n"); } } } CopyTextAndStyle(cell, newPara); } //Copy text and style of a paragraph to a cell private static void CopyTextAndStyle(CellRange cell, Paragraph paragraph) { RichText richText = cell.RichText; richText.Text = paragraph.Text; int startIndex = 0; foreach (DocumentObject documentObject in paragraph.ChildObjects) { if (documentObject is TextRange) { TextRange textRange = documentObject as TextRange; string fontName = textRange.CharacterFormat.FontName; bool isBold = textRange.CharacterFormat.Bold; Color textColor = textRange.CharacterFormat.TextColor; float fontSize = textRange.CharacterFormat.FontSize; string textRangeText = textRange.Text; int strLength = textRangeText.Length; ExcelFont font = cell.Worksheet.Workbook.CreateFont(); font.Color = textColor; font.IsBold = isBold; font.Size = fontSize; font.FontName = fontName; int endIndex = startIndex + strLength; richText.SetFont(startIndex, endIndex, font); startIndex += strLength; } if (documentObject is DocPicture) { DocPicture picture = documentObject as DocPicture; cell.Worksheet.Pictures.Add(cell.Row, cell.Column, picture.Image); cell.Worksheet.SetRowHeightInPixels(cell.Row, 1, picture.Image.Height); } } switch (paragraph.Format.HorizontalAlignment) { case HorizontalAlignment.Left: cell.Style.HorizontalAlignment = HorizontalAlignType.Left; break; case HorizontalAlignment.Center: cell.Style.HorizontalAlignment = HorizontalAlignType.Center; break; case HorizontalAlignment.Right: cell.Style.HorizontalAlignment = HorizontalAlignType.Right; break; } } } }
Demander une licence temporaire
Si vous souhaitez supprimer le message d'évaluation des documents générés ou vous débarrasser des limitations de la fonction, veuillez demander une licence d'essai de 30 jours pour toi.