C# 导出表格时表头优化思路
众所周知
众所周知,如果使用DataTable。一般的思路是这么写的
var exprotData = new DataTable("Datas");
exprotData.Columns.Add("编号", Type.GetType("System.String"));
exprotData.Columns.Add("交易号", Type.GetType("System.String"));
然后数据组装,需要
dr["编号"] = item.Id;
dr["交易号"] = item.TransNumber;
这样倒是没有啥毛病,但一来二去修改字段要去修改多处代码。多的话可能会漏掉
优化思路
这里没有经过严格的测试。只是进行尝试
自己写一个Attribute(或者用现成的displayName)
public class DataGridPropertyAttribute : Attribute
{
public string Name { get; set; } public bool IsHaveChild { get; set; } /// <summary>
/// 标记导出到表格的属性
/// </summary>
/// <param name="name">列表头</param>
/// <param name="isHaveChild">是否含有二级数据</param>
public DataGridPropertyAttribute(string name,bool isHaveChild = false)
{
Name = name;
IsHaveChild = isHaveChild;
}
}
然后写一个扩展方法。把标记号的全部用dictionary保存
public static class CustomAttributeExtensions
{
public static Dictionary<DataGridPropertyAttribute, object> GetCustomAttributeEntity<TEntity>(this TEntity entity) where TEntity : class
{
var dic = new Dictionary<DataGridPropertyAttribute, object>();
var type = entity.GetType();
var propInfos = type.GetProperties();
foreach (var propertyInfo in propInfos)
{
if (!propertyInfo.IsDefined(typeof(DataGridPropertyAttribute), false)) continue;
DataGridPropertyAttribute attribute = (DataGridPropertyAttribute)propertyInfo.GetCustomAttribute(typeof(DataGridPropertyAttribute), false); var name = attribute.Name; if(string.IsNullOrEmpty(name)) continue;
if(dic.ContainsKey(attribute)) continue; var value = propertyInfo.GetValue(entity);
dic.Add(attribute,value);
} return dic;
}
}
为什么设定一个 isHaveChild
因为有些数据可能是无限套娃的。比如数据其实存在于OrderMallInfo里面,需要导出为店铺名称。标记为true以便于递归下去找到应该导出的字段(如果有更好的方法请评论告诉我~~)
[DataGridProperty("店铺",true)]
[JsonProperty("mall_info")]
public OrderMallInfo OrderMallInfo { get; set; }
public class OrderMallInfo
{
[DataGridProperty("店铺名称")]
[JsonProperty("platform_mall_name")]
public string PlatformMallName { get; set; }
}
实际运行

false表示已经到尾。这个值需要作为列名,true表示还需要再次做反射尝试。
C# 导出表格时表头优化思路的更多相关文章
- 使用Spreadsheet导出表格时,设置样式
$spreadsheet = new Spreadsheet();// 初始化 $spreadsheet->createSheet();// 添加一个sheet ...
- Html Table用JS导出excel格式问题 导出EXCEL后单元格里的000412341234会变成412341234 7-14 会变成 2018-7-14(7月14) 自定义格式 web利用table表格生成excel格式问题 js导出excel增加表头、mso-number-format定义数据格式 数字输出格式转换 mso-number-format:"\@"
Html Table用JS导出excel格式问题 我在网上找的JS把HTML Tabel导出成EXCEL.但是如果Table里的数字内容为0开的的导成Excel后会自动删除0,我想以text的格式写入 ...
- js导出excel增加表头、mso-number-format定义数据格式
问题1:增加表头 js导出表格时,只会导出table里的展现出的内容,如需增加表头等内容需要在页面获取的字符串中拼接表头的相关字符串,详细介绍如下: tableString:新增的表头内容字符串: c ...
- Swift - 表格图片加载优化(拖动表格时不加载,停止时只加载当前页图片)
列表的单元格中包含有图片在开发中很常见.通常我们可以直接在tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIn ...
- rdlc报表的导出及预览时表头
感谢各路大神的博客,总结rdlc报表中目前用到的知识,积累. 一.rdlc报表PDF打印出现空白页 1.先至Report.rdlc報表設計的頁面,選擇功能表上的[報表]->[報表屬性],在[配置 ...
- layui导出表格全部数据
layui自带的导出表格,只能导出当前页面,如果当前页包含全部数据,那不就是导出全部数据了吗,所以我给导出事件单独定义了一个请求,当触发这个请求时,在后台查询数据时不要按接收的page 和 limit ...
- 【每日一点】1. Java如何实现导出Excel单表头或多表头
一.背景 在后台项目中,经常会遇到将呈现的内容导出到Excel的需求,通过都是导出单个表头的Excel文件,如果存在级联关系的情况下,也就需要导出多表头的场景.今天这篇文章就是分享导出Excel单表头 ...
- jQuery制作多表格固定表头、切换表头的特效
做了好几天的固定表头特效,总算是搞定了.先说明一下基本功能:我们在一个网页上浏览很多份表格数据的时候,肯定会碰到很多分不清表头,也分不清表 格是哪个的情况,这个时候我们就希望能有一种功能,就是我们再下 ...
- vue+element 使用Export2Excel导出表格组件
下载表格组件是根据我自己的业务需求来封装的 使用的是vue中 xlsx 的插件,需要安装新的依赖及配置 仅供参考 不保证和你百分百匹配 安装依赖 npm install -S file-saver x ...
- 百度地图里面搜索到的公司商家电话导出表格?怎样将把百度地图里面搜索到的公司 电话 地址 等数据导出excel里?
好多人在问:如何将百度地图里面搜索到的公司商家电话导出表格?怎样将把百度地图里面搜索到的公司 电话 地址 等数据导出excel里? 现在,很多人都在网络上找商家,联系业务. 百度地图里有很多的商家联系 ...
随机推荐
- Spring源码——@Component,@Service是如何被解析?
引言 在Spring中,Component.Service是在工作中经常被使用到的注解,为了加深对Spring运行机制的理解,今天我们一起来看一下Spring中对Component等注解的处理方式 C ...
- Vue 3深度探索:自定义渲染器与服务端渲染
title: Vue 3深度探索:自定义渲染器与服务端渲染 date: 2024/6/14 updated: 2024/6/14 author: cmdragon excerpt: 这篇文章介绍了如何 ...
- Merry Christmas 礼物
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` Merry Christmas 礼物 日期:2020-12 ...
- 高通平台抓ram dump
高通平台抓ram dump 原文(有删改):https://blog.csdn.net/m0_37166404/article/details/80821600 背景 高通平台下提供了一个工具,专门用 ...
- 【ClickHouse】5:clickhouse集群部署
背景介绍: 有三台CentOS7服务器安装了ClickHouse HostName IP 安装程序 程序端口 centf8118.sharding1.db 192.168.81.18 clickhou ...
- 阿里云服务器Docket安装RabbitMQ 3.8.12
DocketMQ安装RabbitMQ 地址:https://hub.docker.com/ 拉取镜像 docker pull rabbitmq:3.8.12-management-alpine 运行 ...
- Mac mysql5.7.x my.cnf默认配置
配置如下 [client] port = 3306 default-character-set=utf8 [mysqld] character_set_server=utf8 datadir=/usr ...
- xampp+vscode 安装PHP断点调试xdebug
官网下载地址:https://xdebug.org/download.php 这里需要特别注意,有TS(thread safe)和NTS 区别,我建议不要下载最新的,我一开始使用最新的发现插件没有匹配 ...
- Django 结合Vue实现前端页面导出为PDF
Django结合Vue实现前端页面导出为PDF by:授客 QQ:1033553122 测试环境 Win 10 Python 3.5.4 Django-2.0.13.tar.gz 官方下载地址: ht ...
- 缓存框架 Caffeine 的可视化探索与实践
作者:vivo 互联网服务器团队- Wang Zhi Caffeine 作为一个高性能的缓存框架而被大量使用.本文基于Caffeine已有的基础进行定制化开发实现可视化功能. 一.背景 Caffei ...