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("\r\n", "");
                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的在博客園有很多例子,這里我就不寫了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM