將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);//獲取圖片內容 } }
獲取圖片內容的函數:

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; }
這樣就獲取到了文本和圖片信息了。
將文本和圖片信息NPOI插入Excel的在博客園有很多例子,這里我就不寫了。