Конечный результат идеален. Однако Powerpoint выдает ошибку, сообщающую, что файл требует восстановления. После нажатия кнопки «Восстановить» результат будет таким, как ожидалось.
Есть идеи, почему этот код вызывает эту проблему? Любая помощь приветствуется.
Конечный результат идеален. Однако Powerpoint выдает ошибку, сообщающую, что файл требует восстановления. После нажатия кнопки «Восстановить» результат будет таким, как ожидалось. Есть идеи, почему этот код вызывает эту проблему? Любая помощь приветствуется. [code]using System; using System.IO; using System.Linq; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Presentation; using A = DocumentFormat.OpenXml.Drawing;
namespace Easydocgen.Engine { public static class PowerPointTableUpdater {
class Program { static void Main(string[] args) { string csvString = "Name, Age, Gender\nJohn1 Doe, 29, Male\nJane Doe, 25, Female"; string placeholder = "TablePlaceholder"; // Placeholder text to identify the table
// Load your PowerPoint document into a MemoryStream byte[] byteArray = File.ReadAllBytes("YourPowerPointDocument.pptx"); using (MemoryStream memoryStream = new MemoryStream(byteArray)) { // Call the UpdateTableWithCsv method PowerPointTableUpdater.UpdateTableWithCsv(csvString, placeholder, memoryStream);
// Save the updated document to a file File.WriteAllBytes("UpdatedPowerPointDocument_Updated.pptx", memoryStream.ToArray()); } } } public static void UpdateTableWithCsv(string csvString, string placeholder, MemoryStream fileStream) { string[] csvLines = csvString.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); string[][] csvData = new string[csvLines.Length][]; for (int i = 0; i < csvLines.Length; i++) { csvData[i] = csvLines[i].Split(new[] { ',' }, StringSplitOptions.None); }
// Open the existing PowerPoint document using (PresentationDocument pptDoc = PresentationDocument.Open(fileStream, true)) { PresentationPart presentationPart = pptDoc.PresentationPart; var slides = presentationPart.SlideParts;
foreach (var slide in slides) { // Find the table containing the placeholder text var table = slide.Slide.Descendants() .FirstOrDefault(t => t.Descendants().Any(text => text.Text.Contains(placeholder)));
if (table != null) { // Find the row containing the placeholder var headerRow = table.Descendants() .FirstOrDefault(r => r.Descendants().Any(text => text.Text.Contains(placeholder)));
if (headerRow != null) { // Replace the placeholder with headers var headerCells = headerRow.Elements().ToList(); for (int i = 0; i < csvData[0].Length; i++) { if (i < headerCells.Count) { var textBody = headerCells[i].GetFirstChild(); textBody.RemoveAllChildren(); textBody.Append(CreateParagraph(csvData[0][i].Trim())); } else { headerRow.Append(new A.TableCell(new A.TextBody(CreateParagraph(csvData[0][i].Trim())))); } }
// Remove existing rows below the header row var rowsToRemove = table.Elements().SkipWhile(r => r != headerRow).Skip(1).ToList(); foreach (var row in rowsToRemove) { row.Remove(); }
// Add rows from CSV data (excluding the header row) for (int i = 1; i < csvData.Length; i++) { A.TableRow tableRow = new A.TableRow(); foreach (var cell in csvData[i]) { tableRow.Append(new A.TableCell(new A.TextBody(CreateParagraph(cell.Trim())))); } table.Append(tableRow); }
// Save changes to the slide slide.Slide.Save(); } else { Console.WriteLine("Placeholder row not found in the table."); } } else { Console.WriteLine("Table with placeholder not found in the slide."); } }
// Repair the document RepairPowerPointDocument(pptDoc); } }
Я использую пакет ClosedXML (версия 0.95.4), чтобы открыть файл Excel (.xlsx), написанный с использованием расширения NPOI, и загрузить его в хранилище BLOB-объектов в Azure. Итак, к файлу есть доступ.
Однако, когда я пытаюсь открыть файл с помощью...
Я пытаюсь создать PPT, используя Apache Poi 4.1.2.
И при создании нет ошибки, но при открытии PPT я получаю эту ошибку «PowerPoint обнаружил проблему с контентом в файле.ppt».
То же самое работало правильно с POI-3.17. Как справиться с этим?...
Я хочу встроить файл Excel в файл PowerPoint с помощью OpenXML на C#.
Я новичок в использовании OpenXML и не до конца понимаю структуру PowerPoint.
Несмотря на то, что я потратил много времени За время исследований мне не удалось найти ни одного...
Я пытаюсь читать и писать в текстовые поля презентации Powerpoint с помощью OpenXML. Чтобы найти текстовые поля в презентации, я хочу использовать имя выделения. Я безуспешно проверил несколько NonVisualProperties. Есть ли у кого-нибудь решение этой...