aspose.words 23.6版本更新了从word直接转换为excel的功能,但是有个问题,word有多页的情况,比如5页,转换以后只留下了一页,这个要怎么解决?有什么办法可以保存全部的页面?
附件中的word有2页,理想状态下我使用aspose.words直接将其转换为excel,应该是两页文档都在excel里面的,最起码应该分别在sheet1和sheet2中表示,是不是有别的办法实现?WORD转EXCEL问题.zip (18.3 KB)
@jidesheng, 不幸的是,目前这个新功能旨在从 Word 文档中简单地提取表格。 该功能不适用于在 Excel 文件中复制 Word 文档布局。
您的文档有一个表格,分为两页。 您可以通过 LayoutCollector 获取 Word 文档中的表格分割点,但要在 Excel 文件中重新创建工作表之间的表格分割,您将需要使用 Aspose.Cells API。
下面是打印表格每一行的页码的代码示例:
Document doc = new Document("test2.docx");
LayoutCollector collector = new LayoutCollector(doc);
Table table = doc.FirstSection.Body.Tables[0];
int rowIndex = 1;
foreach (Row row in table.GetChildNodes(NodeType.Row, true))
{
Console.WriteLine($"Row {rowIndex} is on page {collector.GetStartPageIndex(row)}");
rowIndex++;
}
对于 Aspose.Cells 部分代码,我建议您创建一个新主题,Aspose.Cells 团队的支持工程师将为您提供帮助。
这样的话太麻烦了,我对这个功能倒是不着急,在未来的版本中,你们会考虑多页的word文档直接转换成多sheet的excel文件吗?
@jidesheng
We have opened the following new ticket(s) in our internal issue tracking system and will deliver their fixes according to the terms mentioned in Free Support Policies.
Issue ID(s): WORDSNET-25671
You can obtain Paid Support Services if you need support on a priority basis, along with the direct access to our Paid Support management team.
@jidesheng, 可以尝试以下代码并查看它是否生成预期的电子表格以及与页面对应的工作表?
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");
生成的效果不太好,有的页面还会被生成图片
你们会对这个更新吗?因为我对这个功能不是很着急,只是不知道你们会不会修复它。
@jidesheng, 我们需要您提供更多详细信息才能继续分析您之前提到的问题。
对于 dest.zip 中的文件, 您能详细说明为什么您认为结果不好吗? 你说的有的页面还会被生成图片什么意思?
如果可以的话,能否截图并标记出您认为不正确的地方。 另请解释预期结果是什么。
抱歉,之前有事情没有仔细看word文档中的内容,有一页本身就是图片,您提供的代码没问题,不过通过这种方式转换出来的excel,和aspose.words中转换出来的效果一样吗?因为我看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.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文件,在格式上会不会相差太大?我现在没有太多时间去测试,如果你们暂时没空的话,我后期会自行测试,感谢你们。
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.