0

0

C#编程之Excel导入、导出(源码下载) (下)

黄舟

黄舟

发布时间:2017-02-06 16:55:57

|

1947人浏览过

|

来源于php中文网

原创

3. Excel导出

3.1 导出流程

919.jpg

3.2 NPOI操作代码

说明:把List转换为Excel

步骤:

①创建一个工作簿(Workbook);

②在工作簿上创建一个工作表(Sheet);

③在工作表上创建第一行(row),第一行为列头,依次写入cellHeard的值(做为列名)。

④循环遍历List集合,每循环一遍创建一个行(row),然后根据cellHeard的键(属性名称)依次从List中的实体对象取值存放到单元格内。

代码:

/// 
/// 实体类集合导出到Excle2003
/// 
/// 单元头的Key和Value:{ { "UserName", "姓名" }, { "Age", "年龄" } };
/// 数据源
/// 工作表名称
/// 文件的下载地址
public static string EntityListToExcel2003(Dictionary cellHeard, IList enList, string sheetName)
{
    try
    {
        string fileName = sheetName + "-" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls"; // 文件名称
        string urlPath = "UpFiles/ExcelFiles/" + fileName; // 文件下载的URL地址,供给前台下载
        string filePath = HttpContext.Current.Server.MapPath("\\" + urlPath); // 文件路径
 
        // 1.检测是否存在文件夹,若不存在就建立个文件夹
        string directoryName = Path.GetDirectoryName(filePath);
        if (!Directory.Exists(directoryName))
        {
            Directory.CreateDirectory(directoryName);
        }
 
        // 2.解析单元格头部,设置单元头的中文名称
        HSSFWorkbook workbook = new HSSFWorkbook(); // 工作簿
        ISheet sheet = workbook.CreateSheet(sheetName); // 工作表
        IRow row = sheet.CreateRow(0);
        List keys = cellHeard.Keys.ToList();
        for (int i = 0; i < keys.Count; i++)
        {
            row.CreateCell(i).SetCellValue(cellHeard[keys[i]]); // 列名为Key的值
        }
 
        // 3.List对象的值赋值到Excel的单元格里
        int rowIndex = 1; // 从第二行开始赋值(第一行已设置为单元头)
        foreach (var en in enList)
        {
            IRow rowTmp = sheet.CreateRow(rowIndex);
            for (int i = 0; i < keys.Count; i++) // 根据指定的属性名称,获取对象指定属性的值
            {
                string cellValue = ""; // 单元格的值
                object properotyValue = null; // 属性的值
                System.Reflection.PropertyInfo properotyInfo = null; // 属性的信息
 
                // 3.1 若属性头的名称包含'.',就表示是子类里的属性,那么就要遍历子类,eg:UserEn.UserName
                if (keys[i].IndexOf(".") >= 0)
                {
                    // 3.1.1 解析子类属性(这里只解析1层子类,多层子类未处理)
                    string[] properotyArray = keys[i].Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);
                    string subClassName = properotyArray[0]; // '.'前面的为子类的名称
                    string subClassProperotyName = properotyArray[1]; // '.'后面的为子类的属性名称
                    System.Reflection.PropertyInfo subClassInfo = en.GetType().GetProperty(subClassName); // 获取子类的类型
                    if (subClassInfo != null)
                    {
                        // 3.1.2 获取子类的实例
                        var subClassEn = en.GetType().GetProperty(subClassName).GetValue(en, null);
                        // 3.1.3 根据属性名称获取子类里的属性类型
                        properotyInfo = subClassInfo.PropertyType.GetProperty(subClassProperotyName);
                        if (properotyInfo != null)
                        {
                            properotyValue = properotyInfo.GetValue(subClassEn, null); // 获取子类属性的值
                        }
                    }
                }
                else
                {
                    // 3.2 若不是子类的属性,直接根据属性名称获取对象对应的属性
                    properotyInfo = en.GetType().GetProperty(keys[i]);
                    if (properotyInfo != null)
                    {
                        properotyValue = properotyInfo.GetValue(en, null);
                    }
                }
 
                // 3.3 属性值经过转换赋值给单元格值
                if (properotyValue != null)
                {
                    cellValue = properotyValue.ToString();
                    // 3.3.1 对时间初始值赋值为空
                    if (cellValue.Trim() == "0001/1/1 0:00:00" || cellValue.Trim() == "0001/1/1 23:59:59")
                    {
                        cellValue = "";
                    }
                }
 
                // 3.4 填充到Excel的单元格里
                rowTmp.CreateCell(i).SetCellValue(cellValue);
            }
            rowIndex++;
        }
 
        // 4.生成文件
        FileStream file = new FileStream(filePath, FileMode.Create);
        workbook.Write(file);
        file.Close();
 
        // 5.返回下载路径
        return urlPath;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

3.3 C#逻辑操作代码

说明:对Excel转换后的List进行后续操作;如:检测有效性、持久化存储等等

步骤:

①获取List集合。

萤火商城
萤火商城

萤火商城V2.0,是2021年全新推出的一款轻量级、高性能、前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP,前后端源码完全开源,看见及所得,完美支持二次开发,可学习可商用,让您快速搭建个性化独立商城。萤火商城V2.0开源版 [uni-app端]如何使用uni-app端一、导入uniapp项目 1. 首先下载HBuilderX并安装,地址:https://www.dcloud

下载

②调用3.2,将List转换为Excel文件。

③服务器存储Excel文件并返回下载链接。

代码:

public void ExportExcel(HttpContext context)
{
    try
    {
        // 1.获取数据集合
        List enlist = new List() {
            new UserEntity{Name="刘一",Age=22,Gender="Male",TranscriptsEn=new TranscriptsEntity{ChineseScores=80,MathScores=90}},
            new UserEntity{Name="陈二",Age=23,Gender="Male",TranscriptsEn=new TranscriptsEntity{ChineseScores=81,MathScores=91} },
            new UserEntity{Name="张三",Age=24,Gender="Male",TranscriptsEn=new TranscriptsEntity{ChineseScores=82,MathScores=92} },
            new UserEntity{Name="李四",Age=25,Gender="Male",TranscriptsEn=new TranscriptsEntity{ChineseScores=83,MathScores=93} },
            new UserEntity{Name="王五",Age=26,Gender="Male",TranscriptsEn=new TranscriptsEntity{ChineseScores=84,MathScores=94} },
        };
 
        // 2.设置单元格抬头
        // key:实体对象属性名称,可通过反射获取值
        // value:Excel列的名称
        Dictionary cellheader = new Dictionary {
            { "Name", "姓名" },
            { "Age", "年龄" },
            { "GenderName", "性别" },
            { "TranscriptsEn.ChineseScores", "语文成绩" },
            { "TranscriptsEn.MathScores", "数学成绩" },
        };
 
        // 3.进行Excel转换操作,并返回转换的文件下载链接
        string urlPath = ExcelHelper.EntityListToExcel2003(cellheader, enlist, "学生成绩");
        System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
        context.Response.ContentType = "text/plain";
        context.Response.Write(js.Serialize(urlPath)); // 返回Json格式的内容
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

3.4 代码分析

核心代码主要是cellheader与List之间的映射关系:

920.jpg

4. 源码下载

4.1 运行图

921.jpg

4.2 下载地址 

百度网盘: http://pan.baidu.com/s/1o69We8M

CSDN:http://download.csdn.net/download/polk6/8974195

以上就是C#编程之Excel导入、导出(源码下载) (下)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

40

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

50

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

12

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

13

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 8.1万人学习

C 教程
C 教程

共75课时 | 4.3万人学习

C++教程
C++教程

共115课时 | 15万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号