Aspose.word转换为excel分页的问题

@jidesheng, 感谢您附上文件。您能详细说明为什么您认为结果不好吗? 你说的有的页面还会被生成图片什么意思?

如果可以的话,能否截图并标记出您认为不正确的地方。 另请解释预期结果是什么。

你们会对这个更新吗?因为我对这个功能不是很着急,只是不知道你们会不会修复它。

@jidesheng, 我们需要您提供更多详细信息才能继续分析您之前提到的问题。

对于 dest.zip 中的文件, 您能详细说明为什么您认为结果不好吗? 你说的有的页面还会被生成图片什么意思?

如果可以的话,能否截图并标记出您认为不正确的地方。 另请解释预期结果是什么。

抱歉,之前有事情没有仔细看word文档中的内容,有一页本身就是图片,您提供的代码没问题,不过通过这种方式转换出来的excel,和aspose.words中转换出来的效果一样吗?因为我看aspose.words自带的转换,能够保留原格式,并且基本一致。

@jidesheng, 您能否澄清一下您的意思是什么类型的转换:

不过通过这种方式转换出来的excel,和aspose.words中转换出来的效果一样吗?

你们提供的代码:
Document doc = new Document(“test2.docx”);

// Generate a separate section for each page of the input document in the destination document.
Document destination = (Document)doc.Clone(false);
for (int i = 0; i < doc.PageCount; i++)
{
Document pageDoc = doc.ExtractPages(i, 1);
foreach (Node section in pageDoc.Sections)
destination.AppendChild(destination.ImportNode(section, true));
}

// Save the document.
destination.Save(“multisheet.xlsx”);

也就是上面这一段,和aspose.words使用saveformat.xlsx的转换是一样的吗?

@jidesheng, destination.Save(“multisheet.xlsx”) 和destination.Save(“multisheet.xlsx”, SaveFormat.XLSX) 产生相同的结果。

save(String fileName) 方法根据扩展名确定保存格式。

//这段是aspose.words转为excel的代码

    Aspose.Words.Document TempLoadDocument = new Aspose.Words.Document(DocumentFileName);

    Aspose.Words.Saving.XlsxSaveOptions TempSaveXlsOption = new Aspose.Words.Saving.XlsxSaveOptions
    {
        SaveFormat = Aspose.Words.SaveFormat.Xlsx,
        CompressionLevel = Aspose.Words.Saving.CompressionLevel.Maximum
    };

    TempLoadDocument.Save(SavedDcoumentFileName, TempSaveXlsOption);

//这段是您这边提供给我的导出全部页面到excel的代码

Document doc = new Document(“test2.docx”);
// Generate a separate section for each page of the input document in the destination document.
Document destination = (Document)doc.Clone(false);
for (int i = 0; i < doc.PageCount; i++)
{
Document pageDoc = doc.ExtractPages(i, 1);
foreach (Node section in pageDoc.Sections)
destination.AppendChild(destination.ImportNode(section, true));
}

// Save the document.
destination.Save("multisheet.xlsx");

我其实想问的问题是:上面两种方式生成出来的excel文件,在格式上会不会相差太大?我现在没有太多时间去测试,如果你们暂时没空的话,我后期会自行测试,感谢你们。

@jidesheng, 只有第二个程序才会生成具有与 Word 文档中的页面相对应的多个工作表的电子表格。

The issues you have found earlier (filed as WORDSNET-25671) have been fixed in this Aspose.Words for .NET 24.3 update also available on NuGet.

你好,我收到了你们更新通知,目前确实是拆分以后会变为多个工作表,请问是否有设置参数可以控制是否分页的功能?比如我不需要拆分到多个sheet;而是单一的将多页word拆分到同一个sheet中呢?还有一个问题,目前版本中拆分是根据分页符来的,如果分页不是依靠分页符的,比如通过设置段落磅值、段前段后或者粗暴的使用回车进行分页,这种情况aspose.words不会正确的拆分页面到各自sheet中。

@jidesheng
感谢您报告此问题。 我们已经在我们的内部问题跟踪系统中打开了以下新工单,并将根据 免费支持政策 中提到的条款提供它们的修复:

Issue ID(s): WORDSNET-27043

如果您需要优先支持以及直接联系我们的付费支持管理团队,您可以获得 付费支持服务

@jidesheng 要将多页文档保存为单页,可以使用以下代码:

XlsxSaveOptions saveOptions = new XlsxSaveOptions();
saveOptions.SectionMode = XlsxSectionMode.SingleWorksheet;

如果要将多页文档逐页转换为 xlsx 表,则需要使用此代码:

Document doc = new Document("test2.docx");

Document destination = (Document)doc.Clone(false);
for (int i = 0; i < doc.PageCount; i++)
{
    Document pageDoc = doc.ExtractPages(i, 1);
    foreach (Node section in pageDoc.Sections)
        destination.AppendChild(destination.ImportNode(section, true));
}

// Save the document.
destination.Save("multisheet.xlsx");

上面我创建了任务,通过保存选项来管理该选项。

@jidesheng 在分析问题的过程中,我们发现了使用以下代码进行页面抽取时出现的问题:

Document doc = new Document("input.docx");

for (int i = 0; i < doc.getPageCount(); i++)
    doc.extractPages(i, 1).save(getArtifactsDir() + "output_" + i + ".docx");

下面是一份有问题的文档,其中包含页码和双页脚图像。你说的制作更多图片是指这个吗?

output_8.docx (27.0 KB)

这个没事了,我当时其实就是想问两个问题:
1、你们写的extractpages导出到单个excel和直接调用save方法输出的是不是一样的;这个问题已经解决了
2、当时我以为转换过程中word实际是文字组成的页面变为图片了,后来我经过排查发现,我自己以为出现问题那页文档,实际本身就是一张图片

所以我现在没啥问题了,感谢/

@jidesheng 好的,感谢您提供的补充信息。

The issues you have found earlier (filed as WORDSNET-27043) have been fixed in this Aspose.Words for .NET 24.7 update also available on NuGet.

目前版本中拆分是根据分页符来的,如果分页不是依靠分页符的,比如通过设置段落磅值、段前段后或者粗暴的使用回车进行分页,这种情况aspose.words不会正确的拆分页面到各自sheet中。

请问这个问题在24.7中解决了吗,是要设置什么参数吗,测试了一下好像通过回车分页的文档还是不会拆分到单独sheet里面。

下面是测试用的文档。
files.zip (17.3 KB)

@jidesheng 在额外的分析和向您提出的问题中,您写道您解决了问题,因此我们关闭了这个无法修复的问题。我们的实现模仿了MS Word的行为。目前尚不清楚在这种情况下你真正需要什么。提供了如何将文档转换为xlsx的所有示例。如果您想按某些特定位置将输入文档拆分为XLSX工作表,我们可以建议在这些位置插入分节符,然后导出到XLSX。如果您不想按页面拆分文档,请使用:

XlsxSaveOptions saveOptions = new XlsxSaveOptions();
saveOptions.SectionMode = XlsxSectionMode.SingleWorksheet;

如上所述。

好的,我了解了。谢谢。 :smiling_face_with_three_hearts: