解决ASP.NET替换WORD时,字符串参量过长

时间: 2012-05-22 / 分类: 学习心得 / 浏览次数: 9,472 / 36个评论 发表评论

项目中需要最后能够到处一份 WORD 版本的报告,设计好模板并且在需要自动替换的地方设置标记是最简单实用的方法了。不过在测试的时候遇到一个问题,就是要替换的字符串超过一定的长度,就会提示“字符串参量过长”。

搜索了一下,发现是因为 Word 空间替换中的字符限制造成的,不过有说最大长度255字符,也有说只能支持大约230字符左右。为了突破这个限制,我将须要替换的大段文字进行截断,采取逐步替换的方法实现。

下面是替换的算法:


    /// <summary>
    /// 查找替换Word内容并进行替换
    /// 用于文档中大段文字替换
    /// 解决WORD文字写入时255个字符限制
    /// </summary>
    /// <param name="wordApp">WORD文档</param>
    /// <param name="findText">查找的标记</param>
    /// <param name="replaceText">替换的文字</param>
    public void FindAndReplaceLong(Word.Application wordApp, object findText, object replaceText)
    {
        int len = replaceText.ToString().Length;   //要替换的文字长度
        int cnt= len / 220;                     //不超过220个字
        string newstr;
        object newStrs;

        if (len < 220)           //小于220字直接替换
        {
            FindAndReplace(wordApp, findText, replaceText);
        }
        else
        {
            for (int i = 0; i <= cnt; i++)
            {
                if (i != cnt)
                {
                    newstr = replaceText.ToString().Substring(i * 220, 220) + findText;  //新的替换字符串
                }
                else
                {
                    newstr = replaceText.ToString().Substring(i * 220, len - i * 220);    //最后一段需要替换的文字
                }
                newStrs = (object)newstr;
                FindAndReplace(wordApp, findText, newStrs);                              //进行替换
            }
        }
    }

    /// <summary>
    /// 查找替换Word内容
    /// 主要用于文档中多个标记的逐一替换
    /// </summary>
    /// <param name="wordApp">WORD文档</param>
    /// <param name="findText">查找的标记</param>
    /// <param name="replaceText">替换的文字</param>
    public void FindAndReplace(Word.Application wordApp, object findText, object replaceText)
    {
        object matchCase = true;
        object matchWholeWord = true;
        object matchWildCards = false;
        object matchSoundsLike = false;
        object matchAllWordForms = false;
        object forward = true;
        object format = false;
        object matchKashida = false;
        object matchDiacritics = false;
        object matchAlefHamza = false;
        object matchControl = false;
        object read_only = false;
        object visible = true;
        object replace = 2;
        object wrap = 1;

        wordApp.Selection.Find.Execute(ref findText, ref matchCase, ref matchWholeWord, ref matchWildCards,
            ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, ref replaceText,
            ref replace, ref matchKashida, ref matchDiacritics, ref matchAlefHamza, ref matchControl);
    }

历史上的今天

2016年:快乐星期天415期:娱乐圈(40)(33条评论)

2015年:看电影031(40条评论)

2014年:查看路由器上的PPPoE密码(39条评论)

2013年:多看《精品阅读时光(第6/7/8期)》书摘(26条评论)

2011年:泉城广场·护城河·黑虎泉(0条评论)

2010年:艾奇逊、杜勒斯:和平演变与《十条戒令》(45条评论)

2009年:《藏地密码》7 香巴拉之夜 第一部分 纯真年代 (上)(1条评论)

2009年:5minutesfame,5分钟的Twitter明星(0条评论)

2008年:震惊:汶川大地震已造成51151人遇难29328人失踪(0条评论)

2008年:哀悼与团结的曲线--转自谷歌黑板报(0条评论)

2006年:毕业答辩等等(0条评论)

2006年:我真的郁闷了~(0条评论)

36个评论

  1. 标语大全
    2012/05/22 08:42:34

    有潜力,看好你哦

  2. 石家庄婚纱摄影
    2012/05/22 09:42:03

    原来是这样改的啊,支持一下了

  3. 小年
    2012/05/22 10:56:46

    研究的内容很广嘛

  4. ifenwen
    2012/05/22 11:09:50

    这个不懂

  5. 屠龙
    2012/05/22 11:17:00

    讲得很详细,不错哦

  6. 古墓候梅
    2012/05/22 11:24:12

    太专业了,不懂!!!

  7. 行畔博客
    2012/05/22 12:13:16

    好深入!!支持你!!

  8. Byncc
    2012/05/22 16:36:36

    ASP.NET,好陌生呀,。。。

  9. 吴克难的博客
    2012/05/22 16:39:14

    值得学习,很有用

  10. 咦哇噢博客
    2012/05/22 17:38:11

    很久没来了!加油!

  11. 蓝颜
    2012/05/22 19:34:09

    唉。现在我正在忙着做.net作业呢

  12. Xylon Pan
    2012/05/22 19:48:41

    路过,不懂,再飘过。。。

  13. 呱呱
    2012/05/22 21:35:29

    学校的时候学了点.net,现在都快忘光了。

  14. 王善钟
    2012/05/22 22:53:49

    c#学的不好中。。。

  15. Always.Life
    2012/05/23 03:14:14

    这个想法是非常不错,我就是个死脑筋,如果是我,估计类似也不到这样的办法,还要小骂Google,百度一会儿,呵呵

  16. 新号外
    2012/05/23 12:09:35

    咦,又在折腾asp.net了啊

  17. 象牙塔
    2012/05/23 13:34:16

    asp.net当时学的时候纯粹蒙混过关的……

  18. Joy
    2012/05/23 17:40:18

    模版,好烦的。我之前也做这个,我觉得我因此减寿了几年。

  19. suN
    2012/05/23 20:48:54

    惊现酱油党=sun

  20. 独家记忆
    2012/05/24 02:16:37

    这个有用~

  21. 莎龙
    2012/08/02 21:47:25

    你在学习这个?

发表评论

您的昵称 *

您的邮箱 *

您的网站