EPPlus库的安装和使用 C# 中 Excel的导入和导出

安装

工具栏->NuGet 包管理器->管理解决方案的NuGet程序包

安装到当前项目中

使用

将 DataGridView 数据导出为Excel

  1. 首先,需要将数据DataGridView对象转换为DataTable
C# 复制代码
private void btnExport_Click(object sender, EventArgs e)
{
    // 1.将当前页面的dataGridView获取并且转换为datatable对象用于转换数据
    DataTable dt = new DataTable();

    // 创建一个新的DataTable,并添加列  
    for (int i = 0; i < dvgame.ColumnCount; i++)
    {
        dt.Columns.Add(dvgame.Columns[i].HeaderText);
    }

    // 添加行数据  
    for (int i = 0; i < dvgame.RowCount; i++)
    {
        DataRow dr = dt.NewRow();
        for (int j = 0; j < dvgame.ColumnCount; j++)
        {
            dr[j] = dvgame.Rows[i].Cells[j].Value.ToString();
        }
        dt.Rows.Add(dr);
    }
	// 2.使用工具类,将datatable导出为Excel
    ExcelDataConvert.DataToExcel(dt);
}
  1. 将DataTable传入工具类中,导出为Excel
C# 复制代码
public static void DataToExcel(DataTable dataTable)
{
    // 1.创建一个Excel文件
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 使用非商业许可
    ExcelPackage excelPackage = new ExcelPackage();
    // 2.创建一个ExcelSheet 工作表  
    ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("Sheet1");
    // 3.将数据写入到Excel中
    worksheet.Cells["A1"].LoadFromDataTable(dataTable, true);
    // 4.保存文件 保存Excel文件  
    string dictFolder = "C:\\Users\\robin\\Desktop\\csharpExcels";

    DateTime currentTime = DateTime.Now;
    string year = "\\" + currentTime.Year.ToString();
    string month = "\\" + currentTime.Month.ToString();
    string day = "\\" + currentTime.Day.ToString();

    dictFolder += year + month + day;

    // 判断文件夹是否存在,如果不存在则递归创建
    if (!Directory.Exists(dictFolder))
    {
        Directory.CreateDirectory(dictFolder);
    }

    string fileName = "\\" + DateTime.Now.ToString("hh-mm-ss")+ "games.xlsx";

    string filePath = dictFolder + fileName;

    if (File.Exists(filePath))
    {
        File.Delete(filePath);
    }
    excelPackage.SaveAs(new FileInfo(filePath));
    // Console.WriteLine("Excel文件已导出!");
    MessageBox.Show("Excel文件已经导出!路径为"+filePath);
}

将Excel导入到数据库中

导入数据无非就是,读取数据,以及Sql注入

c# 复制代码
public static void ExcelToDataGame(string filepath)
{

    // 1.配置Eplus
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 使用非商业许可,如有需要请更改  
    ExcelPackage package = new ExcelPackage(new FileInfo(filepath));

    ExcelWorksheet worksheet = package.Workbook.Worksheets[0];  // 选择第一个工作表  
    int rowCount = worksheet.Dimension.Rows;  // 获取行数  
    int colCount = worksheet.Dimension.Columns;  // 获取列数  

    // 2.获取数据库对象
    GameDataAccess conn =  GameDataAccess.GetInstance();
    int importCounts = 0;
    for (int row = 1; row <= rowCount; row++)
    {
        if (row == 1)
        {
            continue;
        }
        // 3.每次读取一行,执行一行SQl的插入
        string sql = "";
        GameEntity game = new GameEntity();
        game.GameName = worksheet.Cells[row, 1].Value.ToString();
        game.BackImg = worksheet.Cells[row, 2].Value.ToString();
        game.AddTime = DateTime.ParseExact(worksheet.Cells[row, 3].Value.ToString(), "yyyy/M/d H:mm:ss", null);
        game.Price = decimal.Parse(worksheet.Cells[row, 4].Value.ToString());
        game.Issue = worksheet.Cells[row, 5].Value.ToString();
        game.Type = worksheet.Cells[row, 6].Value.ToString();
        game.Describe = worksheet.Cells[row, 7].Value.ToString();
        game.Status = worksheet.Cells[row, 8].Value.ToString() == "下架" ? 0 : 1; //下架 0 ,正常 1
        int rs = conn.AddGame(game);
        if (rs < 0) { return; }
        importCounts++;
        MessageBox.Show(game.GameName + "导入成功!");
    }
    MessageBox.Show("共计导入"+importCounts);
}
相关推荐
淡海水39 分钟前
【原理】Struct 和 Class 辨析
开发语言·c++·c#·struct·class
淡海水42 分钟前
【原理】Unity GC 对比 C# GC
unity·c#·gc·垃圾回收
张人玉1 小时前
C#读取文件, IO 类属性及使用示例
microsoft·c#
咕白m6256 小时前
通过 C# 高效提取 PDF 文本的完整指南
后端·c#
hqwest9 小时前
C#WPF实战出真汁08--【消费开单】--餐桌面板展示
c#·wpf·ui设计·wpf界面设计
orangapple10 小时前
WPF 打印报告图片大小的自适应(含完整示例与详解)
c#·wpf
★YUI★1 天前
学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17
java·学习·游戏·unity·c#
谷宇.1 天前
【Unity3D实例-功能-拔枪】角色拔枪(二)分割上身和下身
游戏·unity·c#·游戏程序·unity3d·游戏开发·游戏编程
LZQqqqqo1 天前
C# 中 ArrayList动态数组、List<T>列表与 Dictionary<T Key, T Value>字典的深度对比
windows·c#·list
Dm_dotnet1 天前
Stylet启动机制详解:从Bootstrap到View显示
c#