为有中文需求的客户提供多渠道中文技术支持.

Wed Aug 23, 2023 9:35 am

如何实现把一个word文件,1:1的复制到一个新文件中?
不适用clone的方式。

zyzx0727
 
Posts: 4
Joined: Wed Aug 23, 2023 7:49 am

Thu Aug 24, 2023 3:59 am

您好,

感谢来信。
您如果不想使用clone的方法,就需要解析原文档获取段落文字、图片、段落样式等,然后把这些内容添加给新文档,这样实现起来十分复杂。更推荐您使用clone的方式实现您的需求。
如果您有任何疑问,请反馈,非常感谢。

Sincerely,
Ula
E-iceblue support team
User avatar

Ula.wang
 
Posts: 282
Joined: Mon Aug 07, 2023 1:38 am

Thu Aug 24, 2023 9:55 am

Ula.wang wrote:您好,

感谢来信。
您如果不想使用clone的方法,就需要解析原文档获取段落文字、图片、段落样式等,然后把这些内容添加给新文档,这样实现起来十分复杂。更推荐您使用clone的方式实现您的需求。
如果您有任何疑问,请反馈,非常感谢。

Sincerely,
Ula
E-iceblue support team


sourceDoc.CloneCompatibilityTo(destinationDoc);
sourceDoc.CloneDefaultStyleTo(destinationDoc);
sourceDoc.CloneThemesTo(destinationDoc);
sourceDoc.CloneWebSettingsTo(destinationDoc);
foreach (Section section in sourceDoc.Sections)
{
Section newSection = (Section)section.Clone();
section.CloneSectionPropertiesTo(newSection);
destinationDoc.Sections.Add(newSection);
}
我通过这种方式,复制了Word文件,基本上1:1还原了,但是目标word文件的表格有区别,没有保留源文件的表格格式,怎么能够保证表格也一模一样呢?

zyzx0727
 
Posts: 4
Joined: Wed Aug 23, 2023 7:49 am

Fri Aug 25, 2023 1:33 am

zyzx0727 wrote:
Ula.wang wrote:您好,

感谢来信。
您如果不想使用clone的方法,就需要解析原文档获取段落文字、图片、段落样式等,然后把这些内容添加给新文档,这样实现起来十分复杂。更推荐您使用clone的方式实现您的需求。
如果您有任何疑问,请反馈,非常感谢。

Sincerely,
Ula
E-iceblue support team


sourceDoc.CloneCompatibilityTo(destinationDoc);
sourceDoc.CloneDefaultStyleTo(destinationDoc);
sourceDoc.CloneThemesTo(destinationDoc);
sourceDoc.CloneWebSettingsTo(destinationDoc);
foreach (Section section in sourceDoc.Sections)
{
Section newSection = (Section)section.Clone();
section.CloneSectionPropertiesTo(newSection);
destinationDoc.Sections.Add(newSection);
}
我通过这种方式,复制了Word文件,基本上1:1还原了,但是目标word文件的表格有区别,没有保留源文件的表格格式,怎么能够保证表格也一模一样呢?

表格中的内容有些段落回车了,怎么能够避免呢

zyzx0727
 
Posts: 4
Joined: Wed Aug 23, 2023 7:49 am

Fri Aug 25, 2023 2:55 am

你好,

感谢你的咨询。
我模拟了一个Word文档并通过最新商业版的Spire.Doc for .net 11.8.1测试了您提供的代码,但我没有重现您的的问题。您是否使用的是我们的最新商业版本?如果不是,请使用最新版本重新测试。另外,您结果文档保存的格式是什么呢?(如:FileFormat.Docx_2016)。
关于文档1:1复制您还可以参考如下代码:
Code: Select all
 static void Main(string[] args)
        {
             //新建Word文档1,用于加载待复制内容的源文档
             Document sourceDoc = new Document(@"E:\\示例\\测试题\\8月8日测试题\\expect.docx");
             //新建Word文档2,用于加载复制内容的目标文档
             Document destinationDoc = new Document();
             //遍历源word文档中的所有section,并把内容复制到目标word文档
             foreach (Section sec in sourceDoc.Sections)
             {
                 destinationDoc.Sections.Add(sec.Clone());
             }
            //保存文档
            destinationDoc.SaveToFile(@"E:\\示例\\测试题\\8月8日测试题\\result2.docx", FileFormat.Docx2016);
}

源文档截图:
1.png

输出文档截图:
2.png

Spire.Doc for .net链接如下:
https://www.e-iceblue.cn/Downloads/Spire-Doc-NET.html
如果问题仍然存在,请提供您的测试文件以帮助我们进行进一步调查,您可以将其附在此处或通过电子邮件发送给我们(support@e-iceblue.com)。非常感谢。

Sincerely,
Ula
E-iceblue support team
User avatar

Ula.wang
 
Posts: 282
Joined: Mon Aug 07, 2023 1:38 am

Fri Aug 25, 2023 9:08 am

Ula.wang wrote:你好,

感谢你的咨询。
我模拟了一个Word文档并通过最新商业版的Spire.Doc for .net 11.8.1测试了您提供的代码,但我没有重现您的的问题。您是否使用的是我们的最新商业版本?如果不是,请使用最新版本重新测试。另外,您结果文档保存的格式是什么呢?(如:FileFormat.Docx_2016)。
关于文档1:1复制您还可以参考如下代码:
Code: Select all
 static void Main(string[] args)
        {
             //新建Word文档1,用于加载待复制内容的源文档
             Document sourceDoc = new Document(@"E:\\示例\\测试题\\8月8日测试题\\expect.docx");
             //新建Word文档2,用于加载复制内容的目标文档
             Document destinationDoc = new Document();
             //遍历源word文档中的所有section,并把内容复制到目标word文档
             foreach (Section sec in sourceDoc.Sections)
             {
                 destinationDoc.Sections.Add(sec.Clone());
             }
            //保存文档
            destinationDoc.SaveToFile(@"E:\\示例\\测试题\\8月8日测试题\\result2.docx", FileFormat.Docx2016);
}

源文档截图:
1.png

输出文档截图:
2.png

Spire.Doc for .net链接如下:
https://www.e-iceblue.cn/Downloads/Spire-Doc-NET.html
如果问题仍然存在,请提供您的测试文件以帮助我们进行进一步调查,您可以将其附在此处或通过电子邮件发送给我们(support@e-iceblue.com)。非常感谢。

Sincerely,
Ula
E-iceblue support team




已邮件发送过去了,还请帮忙看一下。

zyzx0727
 
Posts: 4
Joined: Wed Aug 23, 2023 7:49 am

Fri Aug 25, 2023 10:35 am

您好,

感谢您的咨询。
我测试了您提供的文档,复现了您的问题。我已经在我们的Bug 跟踪系统中记录了这个问题,编号为“SPIREDOC-9823”,后续我们的开发会调查修复的,如果这个问题得到解决,我们会第一时间通知您的。由此造成的不便深感抱歉。

Sincerely
Ula
E-iceblue support team
User avatar

Ula.wang
 
Posts: 282
Joined: Mon Aug 07, 2023 1:38 am

Thu Sep 21, 2023 7:57 am

您好,

感谢您的耐心等待。
经过我们开发团队的调查,使用我们的产品造成文档换行的原因有两个。一是表格宽度,二是保存的文档未设置字符压缩。Word的不同版本表格宽度不同,Word2013以前版本表格宽度不能超过可编辑区域,而Word2013以后版本表格宽度能超过可编辑区域,您提供的文档是2010版本,要和原文档效果一致,保存的文件格式必须是2010并且设置字符压缩。
你可以参考以下代码:
Code: Select all
//新建Word文档1,用于加载待复制内容的源文档
            Document sourceDoc = new Document(@"E:\论坛\论坛34356\error.docx");
             //新建Word文档2,用于加载复制内容的目标文档
             Document destinationDoc = new Document();
            sourceDoc.CloneCompatibilityTo(destinationDoc);
            sourceDoc.CloneDefaultStyleTo(destinationDoc);
            sourceDoc.CloneThemesTo(destinationDoc);
            sourceDoc.CloneWebSettingsTo(destinationDoc);
            foreach (Section section in sourceDoc.Sections)
            {
                Section newSection = (Section)section.Clone();
                section.CloneSectionPropertiesTo(newSection);
                destinationDoc.Sections.Add(newSection);
            }

            destinationDoc.Sections[0].PageSetup.CharacterSpacingControl = CharacterSpacing.compressPunctuation;
            destinationDoc.SaveToFile(@"E:\论坛\论坛34356\result5.docx", FileFormat.Docx2010);


Sincerely,
Ula
E-iceblue support team
User avatar

Ula.wang
 
Posts: 282
Joined: Mon Aug 07, 2023 1:38 am

Return to 中文技术支持