iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >.NET6如何导入和导出EXCEL
  • 434
分享到

.NET6如何导入和导出EXCEL

2023-06-22 04:06:03 434人浏览 泡泡鱼
摘要

.net6如何导入和导出excel,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用NPOI导入.xlsx遇到“EOF in header”报错,网上找好很多方法,没解决,

.net6如何导入和导出excel,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

使用NPOI导入.xlsx遇到“EOF in header”报错,网上找好很多方法,没解决,最后换成EPPlus.Core导入。

导出默认是.xls。

NPOI操作类:

using NPOI.HPSF;using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using System.Collections;using System.Data;namespace CommonUtils{    /// <summary>    /// Excel操作相关    /// </summary>    public class ExcelHelper    {        #region 读取Excel到DataTable        /// <summary>        /// 读取Excel文件的内容        /// </summary>        /// <param name="path"></param>        /// <param name="sheetName">工作表名称</param>        /// <returns></returns>        public static DataTable GetDataTable(string path, string sheetName = null)        {            if (path.ToLower().EndsWith(".xlsx"))                return EPPlusHelper.WorksheetToTable(path, sheetName);            using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))            {                return GetDataTable(file, sheetName);            }        }        /// <summary>        /// 从Excel文件流读取内容        /// </summary>        /// <param name="file"></param>        /// <param name="sheetName"></param>        /// <returns></returns>        public static DataTable GetDataTable(Stream file, string contentType, string sheetName = null)        {            //载入工作簿            IWorkbook workBook = null;            if (contentType == "application/vnd.ms-excel")            {                workBook = new HSSFWorkbook(file);            }            else if (contentType == "application/vnd.openxmlfORMats-officedocument.spreadsheetml.sheet")            {                workBook = new XSSFWorkbook(file);            }            else            {                try                {                    workBook = new HSSFWorkbook(file);                }                catch                {                    try                    {                        workBook = new XSSFWorkbook(file);                    }                    catch                    {                        throw new Exception("文件格式不被支持!");                    }                }            }            //获取工作表(sheetName为空则默认获取第一个工作表)            var sheet = string.IsNullOrEmpty(sheetName) ? workBook.GetSheetAt(0) : workBook.GetSheet(sheetName);            //生成DataTable            if (sheet != null)                return GetDataTable(sheet);            else                throw new Exception(string.Format("工作表{0}不存在!", sheetName ?? ""));        }        /// <summary>        /// 读取工作表数据        /// </summary>        /// <param name="sheet"></param>        /// <returns></returns>        private static DataTable GetDataTable(ISheet sheet)        {            IEnumerator rows = sheet.GetRowEnumerator();            DataTable dt = new DataTable(sheet.SheetName);            //默认第一个非空行为列头            bool isTitle = true;            //标题行索引            int titleRowIndex = 0;            //默认列头后的第一个数据行,作为DataTable列类型的依据            IRow firstDataRow = null;            while (rows.MoveNext())            {                IRow row = null;                if (rows.Current is XSSFRow)//*.xlsx                {                    row = (XSSFRow)rows.Current;                }                else//*.xls                {                    row = (HSSFRow)rows.Current;                }                //是否空行                if (IsEmptyRow(row))                {                    if (isTitle)                    {                        titleRowIndex++;                    }                    continue;                }                else                {                    if (isTitle)                    {                        firstDataRow = sheet.GetRow(titleRowIndex + 1);//默认列头后的第一个数据行,作为DataTable列类型的依据                    }                }                DataRow dr = dt.NewRow();                for (int i = 0; i < row.LastCellNum; i++)                {                    var cell = row.GetCell(i);                    if (isTitle)                    {                        var firstDataRowCell = firstDataRow.GetCell(i);                        if (firstDataRowCell != null || cell != null)                        {                            dt.Columns.Add(cell.StrinGCellValue.Trim());                        }                        else                        {                            dt.Columns.Add(string.Format("未知列{0}", i + 1));                        }                    }                    else                    {                        if (i > dt.Columns.Count - 1) break;                        dr[i] = GetCellValue(cell, dt.Columns[i].DataType);                    }                }                if (!isTitle && !IsEmptyRow(dr, dt.Columns.Count))                {                    dt.Rows.Add(dr);                }                isTitle = false;            }            return dt;        }        /// <summary>        /// 获取单元格值        /// </summary>        /// <param name="cell"></param>        /// <param name="colType"></param>        /// <returns></returns>        private static object GetCellValue(ICell cell, Type colType)        {            if (cell == null || cell.ToString().ToUpper().Equals("NULL") || cell.CellType == NPOI.SS.UserModel.CellType.Blank)                return DBNull.Value;            object val = null;            switch (cell.CellType)            {                case NPOI.SS.UserModel.CellType.Boolean:                    val = cell.BooleanCellValue;                    break;                case NPOI.SS.UserModel.CellType.Numeric:                    var cellValueStr = cell.ToString().Trim();                    if (cellValueStr.IndexOf('-') >= 0 || cellValueStr.IndexOf('/') >= 0)                    {                        DateTime d = DateTime.MinValue;                        DateTime.TryParse(cellValueStr, out d);                        if (!d.Equals(DateTime.MinValue)) val = cellValueStr;                    }                    if (val == null)                    {                        decimal vNum = 0;                        decimal.TryParse(cellValueStr, out vNum);                        val = vNum;                    }                    break;                case NPOI.SS.UserModel.CellType.String:                    val = cell.StringCellValue;                    break;                case NPOI.SS.UserModel.CellType.Error:                    val = cell.ErrorCellValue;                    break;                case NPOI.SS.UserModel.CellType.Formula:                default:                    val = "=" + cell.CellFormula;                    break;            }            return val;        }        /// <summary>        /// 检查是否空数据行        /// </summary>        /// <param name="dr"></param>        /// <returns></returns>        private static bool IsEmptyRow(DataRow dr, int colCount)        {            bool isEmptyRow = true;            for (int i = 0; i < colCount; i++)            {                if (dr[i] != null && !dr[i].Equals(DBNull.Value))                {                    isEmptyRow = false;                    break;                }            }            return isEmptyRow;        }        /// <summary>        /// 检查是否空的Excel行        /// </summary>        /// <param name="row"></param>        /// <returns></returns>        private static bool IsEmptyRow(IRow row)        {            bool isEmptyRow = true;            for (int i = 0; i < row.LastCellNum; i++)            {                if (row.GetCell(i) != null)                {                    isEmptyRow = false;                    break;                }            }            return isEmptyRow;        }        #endregion        #region 生成DataTable到Excel        /// <summary>        /// 生成Excel数据到路径        /// </summary>        /// <param name="data"></param>        /// <param name="path"></param>        public static void GenerateExcel(DataTable data, string path)        {            var workBook = GenerateExcelData(data);            //保存至路径            using (FileStream fs = File.OpenWrite(path)) //打开一个xls文件,如果没有则自行创建,如果存在则在创建时不要打开该文件!            {                workBook.Write(fs);   //向打开的这个xls文件中写入mySheet表并保存。            }        }        /// <summary>        /// 生成Excel数据到字节流        /// </summary>        /// <param name="data"></param>        /// <param name="path"></param>        public static byte[] GenerateExcel(DataTable data)        {            var workBook = GenerateExcelData(data);            using (MemoryStream ms = new MemoryStream())            {                workBook.Write(ms);                return ms.GetBuffer();            }        }        /// <summary>        /// 生成DataTable到Excel        /// </summary>        /// <param name="data"></param>        /// <param name="path"></param>        private static IWorkbook GenerateExcelData(DataTable data)        {            //创建工作簿            var workBook = new HSSFWorkbook();            //生成文件基本信息            GenerateSummaryInformation(workBook);            //创建工作表            var sheet = workBook.CreateSheet("Sheet1");            //创建标题行            if (data != null && data.Columns.Count > 0)            {                IRow row = sheet.CreateRow(0);                for (int i = 0; i < data.Columns.Count; i++)                {                    var cell = row.CreateCell(i);                    cell.SetCellValue(data.Columns[i].ColumnName);                }            }            //创建数据行            if (data != null && data.Rows.Count > 0)            {                for (int rowIndex = 1; rowIndex <= data.Rows.Count; rowIndex++)                {                    IRow row = sheet.CreateRow(rowIndex);                    for (int colIndex = 0; colIndex < data.Columns.Count; colIndex++)                    {                        var cell = row.CreateCell(colIndex);                        var cellValue = data.Rows[rowIndex - 1][colIndex];                        switch (data.Columns[colIndex].DataType.Name)                        {                            case "Byte":                            case "Int16":                            case "Int32":                            case "Int64":                            case "Decimal":                            case "Single":                            case "Double":                                double doubleVal = 0;                                if (cellValue != null && !cellValue.Equals(System.DBNull.Value))                                {                                    double.TryParse(cellValue.ToString(), out doubleVal);                                    cell.SetCellValue(doubleVal);                                }                                break;                            case "DateTime":                                DateTime dtVal = DateTime.MinValue;                                if (cellValue != null && !cellValue.Equals(System.DBNull.Value))                                {                                    DateTime.TryParse(cellValue.ToString(), out dtVal);                                    if (dtVal != DateTime.MinValue)                                    {                                        cell.SetCellValue(dtVal);                                    }                                }                                break;                            default:                                if (cellValue != null && !cellValue.Equals(System.DBNull.Value))                                {                                    cell.SetCellValue(cellValue.ToString());                                }                                break;                        }                    }                }            }            return workBook;        }        /// <summary>        /// 创建文档的基本信息(右击文件属性可看到的)        /// </summary>        /// <param name="workBook"></param>        private static void GenerateSummaryInformation(HSSFWorkbook workBook)        {            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();            dsi.Company = "Company";            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();            si.Subject = "Subject";//主题            si.Author = "Author";//作者            workBook.DocumentSummaryInformation = dsi;            workBook.SummaryInformation = si;        }        #endregion    }}

EPPlus.Core工具类:

//using EPPlus.Extensions;using OfficeOpenXml;using System.Data;namespace CommonUtils{    /// <summary>    /// 使用  EPPlus 第三方的组件读取Excel    /// </summary>    public class EPPlusHelper    {        private static string GetString(object obj)        {            if (obj == null)                return "";            return obj.ToString();        }        /// <summary>        ///将指定的Excel的文件转换成DataTable (Excel的第一个sheet)        /// </summary>        /// <param name="fullFielPath">文件的绝对路径</param>        /// <returns></returns>        public static DataTable WorksheetToTable(string fullFielPath, string sheetName = null)        {            //如果是“EPPlus”,需要指定LicenseContext。            //EPPlus.Core 不需要指定。            //ExcelPackage.LicenseContext = LicenseContext.NonCommercial;            FileInfo existingFile = new FileInfo(fullFielPath);            ExcelPackage package = new ExcelPackage(existingFile);            ExcelWorksheet worksheet = null;            if (string.IsNullOrEmpty(sheetName))            {                //不传入 sheetName 默认取第1个sheet。                //EPPlus 索引是0                //EPPlus.Core 索引是1                worksheet = package.Workbook.Worksheets[1];            }            else            {                                worksheet = package.Workbook.Worksheets[sheetName];            }                         if (worksheet == null)                throw new Exception("指定的sheetName不存在");            return WorksheetToTable(worksheet);        }        /// <summary>        /// 将worksheet转成datatable        /// </summary>        /// <param name="worksheet">待处理的worksheet</param>        /// <returns>返回处理后的datatable</returns>        public static DataTable WorksheetToTable(ExcelWorksheet worksheet)        {            //获取worksheet的行数            int rows = worksheet.Dimension.End.Row;            //获取worksheet的列数            int cols = worksheet.Dimension.End.Column;            DataTable dt = new DataTable(worksheet.Name);            DataRow dr = null;            for (int i = 1; i <= rows; i++)            {                if (i > 1)                    dr = dt.Rows.Add();                for (int j = 1; j <= cols; j++)                {                    //默认将第一行设置为datatable的标题                    if (i == 1)                        dt.Columns.Add(GetString(worksheet.Cells[i, j].Value));                    //剩下的写入datatable                    else                        dr[j - 1] = GetString(worksheet.Cells[i, j].Value);                }            }            return dt;        }    }}

使用:

// See https://aka.ms/new-console-template for more informationusing CommonUtils;using System.Data;Console.WriteLine("Hello, World!");try{    string dir = AppContext.BaseDirectory;    //2003    string fullName = Path.Combine(dir, "测试excel.xls");    DataTable dt = ExcelHelper.GetDataTable(fullName);    Console.WriteLine("Hello, World!" + dir);    //2007    string fullName2 = Path.Combine(dir, "测试excel.xlsx");    //dt = ExcelHelper.GetDataTable(fullName);    //DataTable dt2 = ExcelHelper.GetDataTable(fullName2, "sheetf");    DataTable dt2 = ExcelHelper.GetDataTable(fullName2);    string saveFullName = Path.Combine(dir, "save_excel.xls");    //ExcelHelper2.ExportExcelByMemoryStream(saveFullName, dt2);    string saveFullName2 = Path.Combine(dir, "save_excel2.xls");    ExcelHelper.GenerateExcel(dt2, saveFullName2);    Console.WriteLine("Hello, World!" + dir);}catch (Exception ex){    Console.WriteLine("ex:" + ex.Message);}Console.ReadKey();

.NET6如何导入和导出EXCEL

关于.NET6如何导入和导出EXCEL问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: .NET6如何导入和导出EXCEL

本文链接: https://www.lsjlt.com/news/302632.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • .NET6导入和导出EXCEL
    使用NPOI导入.xlsx遇到“EOF in header”报错,网上找好很多方法,没解决,最后换成EPPlus.Core导入。 导出默认是.xls。 NPOI操作类: usin...
    99+
    2022-11-12
  • .NET6如何导入和导出EXCEL
    .NET6如何导入和导出EXCEL,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用NPOI导入.xlsx遇到“EOF in header”报错,网上找好很多方法,没解决,...
    99+
    2023-06-22
  • tp6 thinkphp6 excel导入导出 PHPExcel导入导出excel
    tp6 thinkphp6 Excel导入导出,主要是使用了PHPExcel类库。 php导出excel数字太长尾数变000解决方法 导出时为什么数字字段要加“\t”。是因为,由于数字超过15位,会被显示成0或者加小数点处理。造成这种情况是...
    99+
    2023-08-31
    php 数据库 服务器
  • fastadmin实现导出Excel和导入Excel数据
    public function export() { if ($this->request->isPost()) { require_once(VENDOR_...
    99+
    2023-08-31
    php Powered by 金山文档
  • java如何使用EasyExcel导入导出excel
    这篇文章主要介绍了java如何使用EasyExcel导入导出excel,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、准备工作1、导包<!-- poi&nb...
    99+
    2023-06-15
  • Java+element实现excel的导入和导出
    目录一、上传excel前端代码二、上传excel后端代码三、下载excel前端代码四、下载excel后端代码本项目是前端vue3,后端springboot开发 需求为:前端导入表格,...
    99+
    2023-05-16
    Java element excel导入和导出 Java excel导入 Java excel导出
  • java使用EasyExcel导入导出excel
    目录一、准备工作 1、导包二、了解注解 1、常用注解2、@ExcelProperty注解 3、@ColumnWith注解 4、@ContentFontStyle注解 5、@Conte...
    99+
    2022-11-12
  • 如何使用koa2完成Excel导入导出
    这篇文章主要介绍了如何使用koa2完成Excel导入导出的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用koa2完成Excel导入导出文章都会有所收获,下面我们一起来看看吧。一、安装 node-xlsxn...
    99+
    2023-07-05
  • SpringBoot中如何使用POI导入导出Excel
    SpringBoot中如何使用POI导入导出Excel,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.创建Excel文档HSSFWorkbook workboo...
    99+
    2023-06-19
  • SQL导入和导出Excel数据的语句
    本篇内容主要讲解“SQL导入和导出Excel数据的语句”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL导入和导出Excel数据的语句”吧!--从Excel文...
    99+
    2022-10-18
  • React实现导入导出Excel文件
    目录表示层 业务层 核心插件xlsx excel 导入 excel 导出 excel 导出插件(js-export-excel) 实现效果结语 表示层 这里我是使用的是antd的U...
    99+
    2022-11-12
  • JavaScript实现excel文件导入导出
    目录一、需求场景描述1.此时前端上传解析excel文件可能更合适2.此时前端下载excel文件可能优雅一些二、实现思路分析1.导入excel文件实现思路分析2.导出excel文件实现...
    99+
    2022-11-13
  • 使用PhpSpreadsheet怎么导入导出Excel
    这篇文章给大家介绍使用PhpSpreadsheet怎么导入导出Excel,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。phpspreadsheet 引入由于PHPExcel早就停止更新维护,所以适用phpspreads...
    99+
    2023-06-15
  • java如何实现Excel的导入、导出操作
    这篇文章主要为大家展示了java如何实现Excel的导入、导出操作,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。一、Excel的导入导入可采用两种方式,一种是JXL,另一种是POI,但前者不能...
    99+
    2023-05-31
    java excel
  • PHP网页怎么导出和导入excel文件
    本篇内容主要讲解“PHP网页怎么导出和导入excel文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP网页怎么导出和导入excel文件”吧!导出和导入表单代码:<p sty...
    99+
    2023-06-04
  • Springboot实现导入导出Excel的方法
    目录一、添加poi的maven依赖二、自定义注解(Excel属性标题、位置等)三、CustomExcelUtils编写四、定义导出实体类五、Controller层代码编写一、添加po...
    99+
    2022-11-12
  • C#通过NPOI导入导出数据EXCEL
    本文实例为大家分享了C#通过NPOI导入导出数据EXCEL的具体代码,供大家参考,具体内容如下 其实从数据库到服务器导入导出有很多方法,但是比较简单的有NPOI这个方法 准备工作,先...
    99+
    2022-11-13
  • 使用EasyExcel实现Excel的导入导出
    文章目录 前言一、EasyExcel是什么?二、使用步骤1.导入依赖2.编写文件上传配置3.配置表头对应实体类4.监听器编写5.控制层6.前端代码 总结 前言 在真实的开发者场景中,经常会使用excel作为数据的载体,进行...
    99+
    2023-08-17
    java
  • C#用NPOI导出导入Excel帮助类
    本文实例为大家分享了C#用NPOI导出导入Excel帮助类的具体代码,供大家参考,具体内容如下 1、准备工作 在管理NuGet程序包中搜索 NPOI,安装 NPOI 到要项目中。 2...
    99+
    2022-11-13
  • 怎么使用Java+element实现excel导入和导出
    本篇内容介绍了“怎么使用Java+element实现excel导入和导出”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!本项目是前端vue3,...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作