关于Unity使用Aspose.Words创建表格单元格垂直合并不生效情况说明

这篇具有很好参考价值的文章主要介绍了关于Unity使用Aspose.Words创建表格单元格垂直合并不生效情况说明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

👉一、前言

最近在使用Aspose.Words.dll实现创建表格功能时,遇到了一个让我费解了好几天的问题——单元格垂直合并失效。我都快要怀疑人生了都,关键是它水平合并没问题,而且创建别的表格垂直合并也没问题;况且经过我反复测试,代码逻辑也是没有问题的,你说这气不气人,都快被我整出玄学来了。功夫不负有心人,终于在一个周末让我找到了问题的关键所在,最终解决了这个Aspose.Words创建表格单元格垂直合并失效的问题。仅以此博客记录,供新同学学习,避免踩坑!

👉二、问题重现

1、首先看一下我用下面两段代码创建的表格:

绘制表格前需要引用的命名空间:

using Aspose.Words;
using Aspose.Words.Tables;

测试表格1:

            string docPath = "xxxx";//doc模板文件的路径
            Document doc = new Document(docPath);
            DocumentBuilder builder = new DocumentBuilder(doc);//绘制文档内容的一支笔
            Table testTable = builder.StartTable();//开始绘制表格
            for (int i = 0; i < 4; i++)
            {
                builder.InsertCell();//绘制一个单元格
                if (i == 0)
                {
                    //水平合并第一个单元标记为First
                    builder.CellFormat.HorizontalMerge = CellMerge.First;
                    builder.Write("测试表头水平合并单元格");
                }
                else
                {
                    //将后面需要水平合并的单元格标记为Previous
                    builder.CellFormat.HorizontalMerge = CellMerge.Previous;
                }
            }
            builder.EndRow();//结束一行
            builder.CellFormat.HorizontalMerge = CellMerge.None;
            for (int i = 0; i < 8; i++)
            {
                builder.InsertCell();
                builder.CellFormat.VerticalMerge = CellMerge.None;

                int cellIdx = (i > 3) ? (i - 4) : i;//用来计算单元格在一行中的下标位置
                if (cellIdx == 0 || cellIdx == 1)//下标为0或1的需要垂直合并
                {
                    if (i < 4)
                    {
                        builder.CellFormat.VerticalMerge = CellMerge.First;
                    }
                    else
                    {
                        builder.CellFormat.VerticalMerge = CellMerge.Previous; 
                    }
                }
                builder.Write("测试单元格合并" + i);
                if (cellIdx == 3)
                {
                    builder.EndRow();
                }
            }
            builder.EndTable();//结束一个表格
            testTable.AllowAutoFit = false;//不允许自适应内容重调尺寸

关于Unity使用Aspose.Words创建表格单元格垂直合并不生效情况说明
测试表格2:

            Table testTable2 = builder.StartTable();

            builder.InsertCell();
            builder.CellFormat.VerticalMerge = CellMerge.First;
            builder.Write("第一行第一列垂直合并");

            builder.InsertCell();
            builder.CellFormat.VerticalMerge = CellMerge.First;
            builder.Write("第一行第二列垂直合并");

            builder.InsertCell();
            builder.CellFormat.VerticalMerge = CellMerge.None;
            builder.Write("第一行第三列不合并");

            builder.InsertCell();
            builder.CellFormat.VerticalMerge = CellMerge.None;
            builder.Write("第一行第四列不合并");

            builder.EndRow();

            builder.InsertCell();
            builder.CellFormat.VerticalMerge = CellMerge.Previous;

            builder.InsertCell();
            builder.CellFormat.VerticalMerge = CellMerge.Previous;

            builder.InsertCell();
            builder.CellFormat.VerticalMerge = CellMerge.None;
            builder.Write("第二行第三列不合并");

            hbuilder.InsertCell();
            builder.CellFormat.VerticalMerge = CellMerge.None;
            builder.Write("第二行第四列不合并");

            builder.EndTable();

关于Unity使用Aspose.Words创建表格单元格垂直合并不生效情况说明

2、被这个问题折磨的心路历程

1.两个绘制表格的代码都是放在一起的,绘制完上一个,就绘制一个了,怎么会出现这种情况呢?郁了个大闷。最开始我还以为是我绘制表格的逻辑写错了,但经过我反复测试代码逻辑肯定是没错的。

2.后面我就怀疑是不是这个Aspose.Words.dll版本的问题,于是我又找了这个版本前后的好几个版本导进来测试也是会出现这个问题,所以也排除了这个原因。

3.由于我用的Unity版本有点低,我在想会不会是Unity版本低的原因这个Api它不支持所以失效呢,后面也排除了。
反反复复换了一些方法,也调试代码测试,堵了好些时间都没解决。

可能心细的朋友看我上面那两段代码早就发现了问题所在:第一段画表格代码比第二段多了一句不一样的代码:testTable.AllowAutoFit = false;(这个属性默认为true)
我也是被折磨了好久才发现这里的,于是我把这句话注释掉,第一个表格的垂直合并就正常了!所以说导致垂直合并失效的原因是这句代码。这个属性是用来设置表格是否可以自适应内容重调表格单元格的尺寸的。如果去掉这句,保存的表格后,如果往单元格里输入内容,单元格的宽度就会横向自适应,弄的表格不好看。所以我的需求里就必须加上这句代码(虽然打开保存后的word文件,也可以设置这个表格属性,但是为了减少用户操作)。如果我继续留这个代码那就无法绘制垂直合并的单元格,所以只能另寻他法,于是我也是一通好找,才找到了一个跟表格布局相关的Api:doc.UpdateTableLayout();,我刚开始是将这句代码放在保存文档之前,发现还是有问题,我又郁闷了,实在是没方法了,后来我想到把这句话放在绘制完表格之后试试,没想到问题解决了!最终我想清楚了这里面的原因,以及得出了解决方法。

👉三、分析原因

我猜想是因为代码里将表格设置为不允许自适应内容后,表格的一些格式设置(如单元格垂直合并)会失效;所以应该在设置AllowAutoFit这个属性前调用UpdateTableLayout()方法更新一下表格的布局,让表格其他属性先生效,再设置AllowAutoFit为false。经过反复测试也证实了,如果设置AllowAutoFit为false后,再调用UpdateTableLayout()方法也是会出现单元格垂直合并失效这个问题。以此得出下文解决方法。

👉四、解决方法

1.注释掉AllowAutoFit=false;这句代码(前提是你没有这个需求),因为它默认就是true允许自适应,只是这样会导致输入内容时列宽自动扩充,不好看而已。没有这个需求的话也不会出现单元格垂直合并失效的问题。

2.如果不允许表格自适应,也就是设置了AllowAutoFit=false的之前,先调用UpdateTableLayout()方法刷新表格布局。

doc.UpdateTableLayout();
table.AllowAutoFit = false;

这样表格就正常了。
关于Unity使用Aspose.Words创建表格单元格垂直合并不生效情况说明
3.不过我看Aspose.Words的官方文档说:通常不需要调用此方法,因为单元格和表的宽度是自动维护的。可能需要在导出到PDF之前调用此方法,只有在PDF输出中出现表格布局错误的极少数情况下才需要调用此方法。目前我没有发现用这个Api会出现文档里的其他内容格式错乱的情况,所以具体就看各自的需求了。
文章来源地址https://www.toymoban.com/news/detail-410179.html

到了这里,关于关于Unity使用Aspose.Words创建表格单元格垂直合并不生效情况说明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【aspose-words】Aspose.Words for Java模板语法详细剖析

    aspose-words模板语法再了解 垂死病中惊坐起,小丑竟是我自己。对于 aspose-words的使用 本狗自以为已炉火纯青,遂在新的迭代任务中毛遂自荐,并在小姐姐面前吹了一个大牛,分分钟解决完事。 蜜汁自信来源:本狗之前关于aspose-words文章,大家可审阅 【屎上最全vue-pdf+Springboot与

    2024年02月09日
    浏览(39)
  • Word处理控件Aspose.Words功能演示:使用 C# 在 Word 文档中创建和修改 VBA 宏

    Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格式和最常用的图像

    2024年02月03日
    浏览(31)
  • Aspose.Words for JasperReports Crack

    Added support for text wrapping in headers and footers. Added the ability to remove digital signatures from ODT documents. Added the ability to read chart category. Added the ability to modify/remove chart series data. Added support for Microsoft Azure Rights Management RMS Encryption. Added the ability to format data series in scatter charts.   You can now

    2024年02月10日
    浏览(34)
  • aspose-words按需求导出图像

    使用aspose-words时,经常会遇到需要导出文档中所有图片,或者按需求导出特定图片的需求。使用 Aspose.Words API,这项任务变得很简单,它已经提供了提取和保存图像数据的功能, 但是,有时可能想要类似地 提取由不同类型的绘图对象表示的其他类型的图形内容 ,例如包含段

    2024年02月22日
    浏览(42)
  • Word控件 Aspose.words for.NET 授权须知

    Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格式和最常用的图像

    2024年02月04日
    浏览(40)
  • 借助文档控件Aspose.Words,将 Word DOC/DOCX 转换为 TXT

    在文档处理领域,经常需要将 Word 文档转换为更简单的纯文本格式。无论是出于数据提取、内容分析还是兼容性原因,将 Word(.doc、.docx)文件转换为纯文本(.txt)的能力对于开发人员来说都是一项宝贵的技能。在这篇博文中,我们将探讨如何在 C# 应用程序中将 Word 文档转换

    2024年01月19日
    浏览(41)
  • Java版Word开发工具Aspose.Words基础教程:检测文件格式并检查格式兼容性

    Aspose.Words for Java是功能丰富的文字处理API,开发人员可以在自己的Java应用程序中嵌入生成,修改,转换,呈现和打印Microsoft Word支持的所有格式的功能。它不依赖于Microsoft Word,但是它提供了Microsoft Word通过其API支持的功能。 Aspose.Words for Java最新下载 https://www.evget.com/product/

    2024年02月14日
    浏览(38)
  • aspose-words、itextpdf完美解决java将word、excel、ppt、图片转换为pdf文件

    我是 傲骄鹿先生 ,沉淀、学习、分享、成长。 如果你觉得文章内容还可以的话,希望不吝您的「一键三连」,文章里面有不足的地方希望各位在评论区补充疑惑、见解以及面试中遇到的奇葩问法 面对日常开发过程中,将各种文件转换为pdf文件的问题,总是让人头疼,这次终

    2024年02月03日
    浏览(42)
  • Unity学习笔记 关于Unity相机的FOV以及水平FOV和垂直FOV之间的转换

    关于FOV FOV 是在任何给定时间通过人眼、相机取景器或在显示屏上可见的可观察世界的范围。它指的是整个区域的覆盖范围,而不是单个固定焦点。FOV 还描述了一个人可以看到可见世界的角度。 FOV 越宽,可以看到的可观察世界就越多。它是水平、垂直和对角线测量的。相机

    2024年02月08日
    浏览(30)
  • 如何使用xlwings库创建图表及设置坐标轴标题文本内容----关于Python里xlwings库对Excel表格的操作(三十二)

    这篇小笔记主要记录如何 【如何使用“Chart类”、“Api类\\\"和“Axes函数”设置坐标轴标题文本内容】 。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库; (2)如何在Wps下使用xlwings中

    2024年01月22日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包