如何用DataTable生成RTF table

来源:互联网 发布:淘宝1万多的充气娃娃 编辑:程序博客网 时间:2024/04/29 18:25

 

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Turf.Utils
{
    public class RTFConvertUtil
    {
        public static string Convertdatatable2rtf(DataTable dataresults)
        {
            string results = @"{\rtf1\ansi\deff0\fs18 ";
            results += @"\trowd\trautofit1   ";

            int counter = 1;
            foreach (DataColumn myProperty in dataresults.Columns)
            {
                results += @"\cellx" + (counter * 2000) + " ";
                counter++;
            }

            foreach (DataColumn myProperty in dataresults.Columns)
                results += myProperty.ColumnName + @"\cell ";
            results += @"\row ";
            foreach (DataRow DR in dataresults.Rows)
            {
                results += @"\trowd\trautofit1  ";

                counter = 1;
                foreach (DataColumn myProperty in dataresults.Columns)
                {
                    results += @"\cellx" + (counter * 2000) + " ";

                    counter++;
                }

                foreach (DataColumn myProperty in dataresults.Columns)
                    results += DR[myProperty].ToString() + @"\cell ";

                results += @"\row ";
            }

            results += "}";

            return results;
        }
        public static PasteDataModel ConvertTable2PasteData(DataTable dt)
        {
            StringBuilder sbRTFText = new StringBuilder(@"{\rtf1\fbidis\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\fnil\fcharset0 Microsoft Sans Serif;}}");
            StringBuilder sbPlainText = new StringBuilder();
            // Width will be in TWIPS
            int LeftColWidth = 10000/dt.Columns.Count;
            int OtherColumnsWidth = 10000/dt.Columns.Count;
            int ColumnPosition;

#region Add Table Header
            // STARTING TABLE ROW
            sbRTFText.Append(@"{\trowd\trleft0\trgaph-0\trbrdrt\brdrs\brdrw15\brdrcf0\trbrdrb\brdrs\brdrw15\brdrcf0\trbrdrr\brdrs\brdrw15\brdrcf0\trbrdrl\brdrs\brdrw15\brdrcf0\trbrdrv\brdrs\brdrw15\brdrcf0\trbrdrh\brdrs\brdrw15\brdrcf0\trftsWidth1\trftsWidthB3\trpaddl10\trpaddr10\trpaddb10\trpaddt10\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trql\ltrrow");
            // LEFT COLUMN DEFINITION
            ColumnPosition = LeftColWidth;
            sbRTFText.Append(@"\clvertalt\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\clftsWidth3\clwWidth" + LeftColWidth.ToString() + @"\cellx" + ColumnPosition.ToString());
            // OTHER COLUMNS DEFINITION
            for (int j = 1; j < dt.Columns.Count; j++)
            {
                ColumnPosition += OtherColumnsWidth;
                sbRTFText.Append(@"\clvertalt\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\clftsWidth3\clwWidth" + OtherColumnsWidth.ToString() + @"\cellx" + ColumnPosition.ToString());
            }

            sbRTFText.Append("{");
            // PLACING DATA
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                sbRTFText.Append(@"{\fs22\f3\b\intbl {\ltrch " + dt.Columns[j].Caption.ToString() + @"}\li0\ri0\sa0\sb0\fi0\ql\sl15\slmult0\cell}");
            }

            sbRTFText.Append("}");
            // ENDING TABLE ROW
            sbRTFText.Append(@"{\trowd\trleft0\trgaph-0\trbrdrt\brdrs\brdrw15\brdrcf0\trbrdrb\brdrs\brdrw15\brdrcf0\trbrdrr\brdrs\brdrw15\brdrcf0\trbrdrl\brdrs\brdrw15\brdrcf0\trbrdrv\brdrs\brdrw15\brdrcf0\trbrdrh\brdrs\brdrw15\brdrcf0\trftsWidth1\trftsWidthB3\trpaddl10\trpaddr10\trpaddb10\trpaddt10\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trql\ltrrow");
            // LEFT COLUMN
            ColumnPosition = LeftColWidth;
            sbRTFText.Append(@"\clvertalt\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\clftsWidth3\clwWidth" + LeftColWidth.ToString() + @"\cellx" + ColumnPosition.ToString());
            // OTHER COLUMNS
            for (int j = 1; j < dt.Columns.Count; j++)
            {
                ColumnPosition += OtherColumnsWidth;
                sbRTFText.Append(@"\clvertalt\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\clftsWidth3\clwWidth" + OtherColumnsWidth.ToString() + @"\cellx" + ColumnPosition.ToString());
            }
            sbRTFText.Append(@"\row}}");
#endregion
#region Add Cell Content
            DataRow dr;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                dr = dt.Rows[i];
                // STARTING TABLE ROW
                sbRTFText.Append(@"{\trowd\trleft0\trgaph-0\trbrdrt\brdrs\brdrw15\brdrcf0\trbrdrb\brdrs\brdrw15\brdrcf0\trbrdrr\brdrs\brdrw15\brdrcf0\trbrdrl\brdrs\brdrw15\brdrcf0\trbrdrv\brdrs\brdrw15\brdrcf0\trbrdrh\brdrs\brdrw15\brdrcf0\trftsWidth1\trftsWidthB3\trpaddl10\trpaddr10\trpaddb10\trpaddt10\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trql\ltrrow");
                // LEFT COLUMN DEFINITION
                ColumnPosition = LeftColWidth;
                sbRTFText.Append(@"\clvertalt\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\clftsWidth3\clwWidth" + LeftColWidth.ToString() + @"\cellx" + ColumnPosition.ToString());
                // OTHER COLUMNS DEFINITION
                for (int j = 1; j < dt.Columns.Count; j++)
                {
                    ColumnPosition += OtherColumnsWidth;
                    sbRTFText.Append(@"\clvertalt\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\clftsWidth3\clwWidth" + OtherColumnsWidth.ToString() + @"\cellx" + ColumnPosition.ToString());
                }

               sbRTFText.Append("{");
                // PLACING DATA
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                        sbRTFText.Append(@"{\fs22\f3\intbl {\ltrch " + dr[j].ToString() + @"}\li0\ri0\sa0\sb0\fi0\ql\sl15\slmult0\cell}");
                }

                sbRTFText.Append("}");
                // ENDING TABLE ROW
                sbRTFText.Append(@"{\trowd\trleft0\trgaph-0\trbrdrt\brdrs\brdrw15\brdrcf0\trbrdrb\brdrs\brdrw15\brdrcf0\trbrdrr\brdrs\brdrw15\brdrcf0\trbrdrl\brdrs\brdrw15\brdrcf0\trbrdrv\brdrs\brdrw15\brdrcf0\trbrdrh\brdrs\brdrw15\brdrcf0\trftsWidth1\trftsWidthB3\trpaddl10\trpaddr10\trpaddb10\trpaddt10\trpaddfl3\trpaddfr3\trpaddft3\trpaddfb3\trql\ltrrow");
                // LEFT COLUMN
                ColumnPosition = LeftColWidth;
                sbRTFText.Append(@"\clvertalt\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\clftsWidth3\clwWidth" + LeftColWidth.ToString() + @"\cellx" + ColumnPosition.ToString());
                // OTHER COLUMNS
                for (int j = 1; j < dt.Columns.Count; j++)
                {
                    ColumnPosition += OtherColumnsWidth;
                    sbRTFText.Append( @"\clvertalt\clbrdrt\brdrs\brdrw10\clbrdrl\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\clftsWidth3\clwWidth" + OtherColumnsWidth.ToString() + @"\cellx" + ColumnPosition.ToString());
                    sbPlainText.Append(dr[j]).Append("\t");
                }
               sbRTFText.Append(@"\row}}");
               sbPlainText.AppendLine();
            }
#endregion
          
            sbRTFText.Append("}");
            return new PasteDataModel(){RtfText = sbRTFText.ToString(),PlainText=sbPlainText.ToString()};
        }
    }

    public class PasteDataModel
    {
        public string PlainText { get; set; }
        public string RtfText { get; set; }
    }
}

原创粉丝点击