记一个小东东.相信大家都做过不少这样的,把数据导入到execl上去.这个很容易.但是不久后就是用户老是要修改execl上的样式.比如给某个栏位加上颜色.

虽然说很容易.但是每修改次都要重新发布.不是很爽.下面说一个比较另类的方法.效果相当于给Execl的样式加上配置文件.

第一步.把数据集给导出成HTML格式.如下.主要是方法EnumToHtml,别的大家不用看.

代码

public static class ExportHelper<T>
    {
        public static readonly List<PropertyInfo> ps = null;
        static ExportHelper()
        {
            if (ps == null)
            {
                ps = typeof(T).GetProperties().ToList();
            }
        }
        public static string EnumToHtml(IEnumerable<T> data, string subject)
        {
            return EnumToHtml(data, subject, null);
        }
        public static string EnumToHtml(IEnumerable<T> data, string subject,string linkcss)
        {
            if (data == null)
                return string.Empty;
            StringBuilder sb = new StringBuilder();
            if (!string.IsNullOrEmpty(linkcss))
            {
                sb.Append("<head>");
                sb.Append("<link rel='stylesheet' type='text/css' href=");
                sb.Append(linkcss).Append(" />");
                sb.Append("</head>");
                sb.Append("<body>");
                sb.Append("<table>");
                sb.Append("<caption>").Append(subject).Append("</caption>");
                sb.Append("<tr class='column'>");
            }
            else
            {
                sb.Append("<body>");
                sb.Append("<table style='border-color: #000000; width:80%; table-layout: auto; border-collapse: collapse;' ");
                sb.Append("border='1' cellpadding='2' cellspacing='2'>");
                sb.Append("<caption style='color: #000000; font-weight: bold; font-size: large' >");               
                sb.Append(subject);
                sb.Append("</caption>");
                sb.Append("<tr>");
            }
            foreach (PropertyInfo info in ps)
            {
                sb.Append("<th id=").Append(info.Name).Append(">");
                sb.Append(info.Name);
                sb.Append("</th>");
            }
            sb.Append("</tr>");
            foreach (T t in data)
            {
                sb.Append("<tr>");
                foreach (PropertyInfo info in ps)
                {
                    sb.Append("<td>");
                    sb.Append(info.GetValue(t, null));
                    sb.Append("</td>");
                }
                sb.Append("</tr>");
            }
            sb.Append("</table>");
            sb.Append("</body>");
            return sb.ToString();
        }
        public static void EnumToExel(Worksheet wsheet, IEnumerable<T> data, string toptext)
        {
            EnumToExel(wsheet, data, toptext, 1, 1);
        }
        public static void EnumToExel(Worksheet wsheet, IEnumerable<T> data, string toptext, int top, int left)
        {
            if (data == null)
                return;
            int nTop = top;
            int nLeft = left;
            foreach (PropertyInfo info in ps)
            {
                wsheet.Cells[nTop, nLeft] = info.Name;
                nLeft++;
            }
            foreach (T t in data)
            {
                nTop++;
                nLeft = left;
                foreach (PropertyInfo info in ps)
                {
                    wsheet.Cells[nTop, nLeft] = info.GetValue(t, null);
                    nLeft++;
                }
            }
            wsheet.get_Range(wsheet.Cells[top, left], wsheet.Cells[nTop, nLeft - 1]).Borders.LineStyle = 1;
        }
        public static void Write(T s)
        {
            foreach (PropertyInfo minfo in ps)
            {
                if (minfo.GetValue(s, null) != null)
                {
                    string value = minfo.GetValue(s, null).ToString();
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.Write(minfo.Name);
                    Console.ForegroundColor = ConsoleColor.White;
                    Console.Write(":");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Write(value);
                    Console.Write(" ");
                }
            }
            Console.WriteLine();
        }
    }

然后.用如下方法导出数据到execl.

代码

 var bomresult = db.A51_BomSendMail(bom.ModelNo).ToList<A51_BomSendMailResult>();
                      //把数据转化成相应的HTML格式的数据表
 body = ExportHelper<A51_BomSendMailResult>.EnumToHtml(bomresult, bom.ModelNo, @"D:\style.css");
    //得到上面数据的字节转换
 byte[] buffer = Encoding.ASCII.GetBytes(body);
     //生成对应的字节流
 Stream stream = new MemoryStream(buffer);
 FileStream filestream = new FileStream(FilePath, FileMode.Create, FileAccess.ReadWrite);
 filestream.Write(buffer, 0, buffer.Length);
 filestream.Close();  

上面的我一部分实现.大家可按自己需求来改.

到这里大家也知道了.其实就是利用CSS来做配置文件.希望大家不要鄙视.^_^

比如开始生成的文件如下.

后面用户要把栏位名加Replaced_by变成红色.整个页面要带点墨色.要好看.

用户就是上帝.没办法.用上面的代码.在如下位置D:\style.css写上CSS;

CSS

table
{
    margin: 1em auto;
    font: 95%/130% Tahoma, Arial, Helvetica, sans-serif;
    border-spacing: 0;
    border-color: #000000;
    width:80%; 
    table-layout: auto; 
    border-collapse: collapse;
}
table caption {
    color: #2442b1;
    font-size:200%;
    letter-spacing: .1em;
    padding: 3.5em 0.2em 2em 0;
    text-align:left;    
    font-weight:900;
}
table td
{
    color: #203276;
    border-top: 1px solid #fff;
    border-right: 1px solid #c6cdd8;
    border-bottom: 1px solid #c6cdd8;
    border-left: 1px solid #fff;
    padding: 1.5em 0.5em 1.5em 0.8em;
    text-align:left;
}
tr.column th
{
    background-color:#BBAABB;    
}
#Replaced_by
{
    background-color:#FF3399;
}

然后效果图如下:

总的来就这么多.但是有的同志喜欢把直接用DataTable.下面也做了一个差不多的.代码简单.给个思路.自己去改.

代码

        public static string EnumToHtml(System.Data.DataTable data, string subject, string linkcss)
        {
            if (data == null)
                return string.Empty;
            StringBuilder sb = new StringBuilder();
            int columnCount = 0;
            if (!string.IsNullOrEmpty(linkcss))
            {
                sb.Append("<head>");
                sb.Append("<link rel='stylesheet' type='text/css' href=");
                sb.Append(linkcss).Append(" />");
                sb.Append("</head>");
                sb.Append("<body>");
                sb.Append("<table>");
                sb.Append("<caption>").Append(subject).Append("</caption>");
                sb.Append("<tr class='column'>");
            }
            else
            {
                sb.Append("<body>");
                sb.Append("<table style='border-color: #000000; width:80%; table-layout: auto; border-collapse: collapse;' ");
                sb.Append("border='1' cellpadding='2' cellspacing='2'>");
                sb.Append("<caption style='color: #000000; font-weight: bold; font-size: large' >");
                sb.Append(subject);
                sb.Append("</caption>");
                sb.Append("<tr>");
            }
            foreach (DataColumn info in data.Columns)
            {
                sb.Append("<th id=").Append(info.ColumnName).Append(">");
                sb.Append(info.ColumnName);
                sb.Append("</th>");
                columnCount++;
            }
            sb.Append("</tr>");
            foreach (DataRow row in data.Rows)
            {
                sb.Append("<tr>");
                for (int i = 0; i < columnCount; i++)
                {
                    sb.Append("<td>");
                    sb.Append(row[i]);
                    sb.Append("</td>");
                }
                sb.Append("</tr>");
            }
            sb.Append("</table>");
            return sb.ToString();
        }

差不多就这么样了.先放着看看.以后他们要改什么样式,直接去CSS里改,不用重新发布.

给Execl样式添加配置文件.相关推荐

  1. 在Word中为标题样式添加自动编号功能

    转自:http://blog.sina.com.cn/s/blog_6238dcdb0100qz8j.html 摘要: 本文可以帮助你在Office 2007中为Word标题样式添加和设置自动编号功能 ...

  2. CAD关于文字样式添加文字样式操作(com接口c#语言)

    下面代码,得到当前数据库中的文字样式表,然后向样式表中添加一个文字样表记录 C#代码: private void AddTextStyle(String sNewTextStyleName){MxDr ...

  3. word 给设定样式添加快捷键

    word 给设定样式添加快捷键 1.格式>样式 样式窗口 2.修改 修改样式窗口 选择添加到模板,这样之后默认打开文档都可以使用这些快捷键. 3.格式>快捷键 自定义键盘窗口 指定新的快捷 ...

  4. Hexo + NexT 通过自定义样式添加 Bilibili 图标

    NexT 默认使用 Font Awesome 库作为 icon 库.美中不足的是,有一些中国的社交网站的图标在 Font Awesome 库中并没有提供,包括我们熟悉的哔哩哔哩.豆瓣.简书等等.所以如 ...

  5. webpack4.x中使用postcss-loader和autoprefixer给css3样式添加浏览器兼容

    当前我们在写css样式的时候总是要处理浏览器兼容问题,那就是加前缀问题,可是我们在开发的时候比如: 直接写个: .className{display: flex; } 想变成下面这种的 .classN ...

  6. php 添加样式,添加样式到php html电子邮件

    我仔细查看了这个问题,我在此发现的是添加以下内容: $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-ty ...

  7. idea 添加配置文件 绿叶子

    为什么80%的码农都做不了架构师?>>>    File->Project Structure..->Facets,然后你会看到Spring (你的项目名称),然后选择你 ...

  8. vue 富文本 样式添加不上_vue结合ueditor富文本编辑器(换肤分离)

    需求 (PC端用它互不直曾经明以机会式近分扯.多接相常)做一个可以使用图片上传.视频上传.文件上传功能的富文本组件,简单的文本编辑发布功能,采用socke览页些求时是过解些这确如目前例总站回广随能4果 ...

  9. CSS样式添加及基础语法------借鉴w3shool.com.cn

    一.添加样式的三种方式 1.外部样式表 在<head>标签中添加<link>标签 <link rel="stylesheet" type=" ...

最新文章

  1. CloudCompare二次开发编译篇(内附交流群更新通知)
  2. 设置session失效的几种方法
  3. 对gitShell的使用
  4. (转)goldengate 复制进程replicat出现ORA-01403 错误
  5. [Java] 蓝桥杯ALGO-149 算法训练 5-2求指数
  6. HTML中td元素的nowrap属性
  7. SQL Server 本机 Web 服务的使用方案(转载)
  8. 连发12款软硬件产品 瑞星领跑企业级安全市场
  9. 价值连城 图灵奖得主Yann LeCun 杨立昆的采访 给AI从业者的建议
  10. 【面试】前端面试人事问题
  11. Java 封装、继承、多态的理解
  12. UML之旅店预订系统
  13. macfee怎么生成释放代码_批处理应用:使用FLASHGET检查Mcafee SuperDat更新
  14. C++课设:GUI电话簿程序
  15. USB PD协议规范
  16. 北京圣思园_Java SE Lesson 11
  17. 看这,苹果手机怎么录音的3个方法!
  18. 【AcWing 327. 玉米田】状压dp
  19. Shiro 安全框架
  20. linux 变量引用 和 变量的自动类型转换 c++,C++能不能让编译器自动推导变量类型吗...

热门文章

  1. key redis 模糊查询个数_Reids Lua 模糊查询所有key 及 相对应的集合总数
  2. android的动态注册,Android JNI 函数注册的两种方式(静态注册/动态注册)
  3. java 307跳转_java – failure:retrofit.RetrofitError:307临时重定向?
  4. loadrunner java 环境_java应用程序及服务器优化过程及loadrunner测试效果
  5. Spring Security UserDetailsService
  6. object.__比较运算__
  7. Advanced techniques: creating sound, sequencing, timing, scheduling
  8. Web_audio_spatialization_basics
  9. hadoop Idea Win本地运行
  10. 1.12 深层循环神经网络