• RTF格式富文本图片文本导出到Excel


    将EXCEL表格文字图片信息转成RTF格式写入数据库BLOB字段

    上篇文章,讲到将Excel文字图片信息转成RTF格式导入数据库,本篇我们讲一下将RTF格式富文本图片文本导出到Excel的操作。

    流程和上一篇是相反的,同样画一下流程图:

    下面讲一下具体代码操作:

    获取文本内容: 

    for (int i = 0; i < dataTable.Rows.Count; i++)//从数据库中读取的内容为DataTable格式
    {
        if (dataTable[0].Rows[i]["DESCRIPTION"] != DBNull.Value)//DESCRIPTION列为RTF格式内容
        {
            byte[] bytes = (byte[])dataTable[0].Rows[i]["DESCRIPTION"];//首先转换成byte[]格式
            RichTextBox richTextBox = new RichTextBox();//新建一个RichTextBox
            string rtfString = Encoding.Default.GetString(bytes);//将byte[]转成RTF格式字符串
            richTextBox.Rtf = rtfString;//将内容赋值给richTextBox.Rtf
            var str = richTextBox.Text;//richTextBox.Text即是RTF文本内容
            List<Image> imagesByRtf = GetImagesByRtf(rtfString);//获取图片内容
        }
    }
    View Code

    获取图片内容的函数:

    private List<Image> GetImagesByRtf(string rtfText)
    {
        List<Image> list = new List<Image>();
        while (true)
        {
            int num;
            int.TryParse(Regex.Match(rtfText, "(?<=picw)[\d]+(?=\\pich)").Value, out num);
            if (num != 0)
            {
                num /= 26;
            }
            int num2;
            int.TryParse(Regex.Match(rtfText, "(?<=pich)[\d]+(?=\\picwgoal)").Value, out num2);
            if (num2 != 0)
            {
                num2 /= 26;
            }
            int num3 = rtfText.IndexOf("pichgoal", StringComparison.Ordinal);
            if (num3 != -1)
            {
                try
                {
                    rtfText = rtfText.Remove(0, num3 + 8);
                    num3 = rtfText.IndexOf(" ", StringComparison.Ordinal);
                    rtfText = rtfText.Remove(0, num3);
                    num3 = rtfText.IndexOf("}", StringComparison.Ordinal);
                    string text = rtfText.Substring(0, num3).Replace("
    ", "");
                    text = text.Trim();
                    rtfText = rtfText.Remove(0, num3);
                    int num4 = text.Length / 2;
                    byte[] array = new byte[num4];
                    for (int num5 = 0; num5 != num4; num5++)
                    {
                        string value = text[num5 * 2] + text[num5 * 2 + 1].ToString();
                        array[num5] = Convert.ToByte(value, 16);
                    }
                    MemoryStream stream = new MemoryStream(array);
                    Image image = Image.FromStream(stream);
                    using (Bitmap bitmap = new Bitmap(image, num, num2))
                    {
                        image = (Image)bitmap.Clone();
                        list.Add(image);
                    }
                    continue;
                }
                catch (Exception)
                {
                    continue;
                }
                break;
            }
            break;
        }
        return list;
    }
    View Code

    这样就获取到了文本和图片信息了。

    将文本和图片信息NPOI插入Excel的在博客园有很多例子,这里我就不写了。

    作者:九年新
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Day3学习笔记
    Day2学习笔记
    Day1学习笔记
    中文标识
    about original idea
    那些和matlab有关的
    GRE Sub math 报名
    虽然实际没有什么用,但是可能会有理论上的意义吧
    latex相关
    对venturelli theorem的重新认识
  • 原文地址:https://www.cnblogs.com/yellow3gold/p/14245096.html
Copyright © 2020-2023  润新知