C#excel导入dategridview并保存到数据库/dategridview增加一行或几行一键保存数据库

excel导入到dategridview显示并保存到数据库

dategridview增加一行或几行一键保存数据库

ExcelHelper类(这个要导入NPOI包)

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;namespace WindowsFormsApp1
{/// <summary>/// 操作Excel通用类/// </summary>public class ExcelHelper{/// <summary>/// 从Excel读取数据,只支持单表/// </summary>/// <param name="FilePath">文件路径</param>public static DataTable ReadFromExcel(string FilePath){IWorkbook wk = null;string extension = System.IO.Path.GetExtension(FilePath); //获取扩展名try{using (FileStream fs = File.OpenRead(FilePath)){if (extension.Equals(".xls")) //2003{wk = new HSSFWorkbook(fs);}else                         //2007以上{wk = new XSSFWorkbook(fs);}}//读取当前表数据ISheet sheet = wk.GetSheetAt(0);//构建DataTableIRow row = sheet.GetRow(0);DataTable result = BuildDataTable(row);if (result != null){if (sheet.LastRowNum >= 1){for (int i = 1; i < sheet.LastRowNum + 1; i++){IRow temp_row = sheet.GetRow(i);if (temp_row == null) { continue; }//2019-01-14 修复 行为空时会出错List<object> itemArray = new List<object>();for (int j = 0; j < result.Columns.Count; j++)//解决Excel超出DataTable列问题    lqwvje20181027{//itemArray.Add(temp_row.GetCell(j) == null ? string.Empty : temp_row.GetCell(j).ToString());itemArray.Add(GetValueType(temp_row.GetCell(j)));//解决 导入Excel  时间格式问题  lqwvje 20180904}result.Rows.Add(itemArray.ToArray());}}}return result;}catch (Exception ex){return null;}}/// <summary>/// 从Excel读取数据,支持多表/// </summary>/// <param name="FilePath">文件路径</param>public static DataSet ReadFromExcels(string FilePath){DataSet ds = new DataSet();IWorkbook wk = null;string extension = System.IO.Path.GetExtension(FilePath); //获取扩展名try{using (FileStream fs = File.OpenRead(FilePath)){if (extension.Equals(".xls")) //2003{wk = new HSSFWorkbook(fs);}else                         //2007以上{wk = new XSSFWorkbook(fs);}}int SheetCount = wk.NumberOfSheets;//获取表的数量if (SheetCount < 1){return ds;}for (int s = 0; s < SheetCount; s++){//读取当前表数据ISheet sheet = wk.GetSheetAt(s);//构建DataTableIRow row = sheet.GetRow(0);if (row == null) { continue; }DataTable tempDT = BuildDataTable(row);tempDT.TableName = wk.GetSheetName(s);if (tempDT != null){if (sheet.LastRowNum >= 1){for (int i = 1; i < sheet.LastRowNum + 1; i++){IRow temp_row = sheet.GetRow(i);if (temp_row == null) { continue; }//2019-01-14 修复 行为空时会出错List<object> itemArray = new List<object>();for (int j = 0; j < tempDT.Columns.Count; j++)//解决Excel超出DataTable列问题    lqwvje20181027{itemArray.Add(GetValueType(temp_row.GetCell(j)));//解决 导入Excel  时间格式问题  lqwvje 20180904}tempDT.Rows.Add(itemArray.ToArray());}}ds.Tables.Add(tempDT);}}return ds;}catch (Exception ex){return null;}}/// <summary>/// 将DataTable数据导入到excel中/// </summary>/// <param name="data">要导入的数据</param>/// <param name="isColumnWritten">DataTable的列名是否要导入</param>/// <param name="sheetName">要导入的excel的sheet的名称</param>/// <param name="fileName">导出的文件途径</param>/// <returns>导入数据行数(包含列名那一行)</returns>public static int DataTableToExcel(DataTable data, string sheetName, string fileName, bool isColumnWritten = true){IWorkbook workbook = null;using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)){if (fileName.IndexOf(".xlsx") > 0) // 2007版本{workbook = new XSSFWorkbook();}else if (fileName.IndexOf(".xls") > 0) // 2003版本{workbook = new HSSFWorkbook();}if (workbook == null) { return -1; }try{ISheet sheet = workbook.CreateSheet(sheetName);int count = 0;if (isColumnWritten) //写入DataTable的列名{IRow row = sheet.CreateRow(0);for (int j = 0; j < data.Columns.Count; ++j){row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName);}count = 1;}for (int i = 0; i < data.Rows.Count; ++i){IRow row = sheet.CreateRow(count);for (int j = 0; j < data.Columns.Count; ++j){row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString());}count++;}workbook.Write(fs); //写入到excelreturn count;}catch (Exception ex){Console.WriteLine("Exception: " + ex.Message);return -1;}}}/// <summary>/// 将DataSet数据导入到excel中   每个datatable一个sheet,sheet名为datatable名/// </summary>/// <param name="ds">要导入的数据</param>/// <param name="isColumnWritten">DataTable的列名是否要导入</param>/// <param name="fileName">导出的文件途径</param>public static bool DataTableToExcel(DataSet ds, string fileName, bool isColumnWritten = true){if (ds == null || ds.Tables.Count < 1){return false;}IWorkbook workbook = null;using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)){if (fileName.IndexOf(".xlsx") > 0) // 2007版本{workbook = new XSSFWorkbook();}else if (fileName.IndexOf(".xls") > 0) // 2003版本{workbook = new HSSFWorkbook();}if (workbook == null) { return false; }try{foreach (DataTable dt in ds.Tables){ISheet sheet = workbook.CreateSheet(dt.TableName);if (isColumnWritten) //写入DataTable的列名{IRow row = sheet.CreateRow(0);for (int j = 0; j < dt.Columns.Count; ++j){row.CreateCell(j).SetCellValue(dt.Columns[j].ColumnName);}}for (int i = 0; i < dt.Rows.Count; ++i){IRow row = sheet.CreateRow(isColumnWritten ? i + 1 : i);for (int j = 0; j < dt.Columns.Count; ++j){row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());}}}workbook.Write(fs); //写入到excel}catch (Exception ex){Console.WriteLine("Exception: " + ex.Message);return false;}}return true;}private static DataTable BuildDataTable(IRow Row){DataTable result = null;if (Row.Cells.Count > 0){result = new DataTable();for (int i = 0; i < Row.LastCellNum; i++){if (Row.GetCell(i) != null){result.Columns.Add(Row.GetCell(i).ToString());}}}return result;}/// <summary>/// 获取单元格类型/// </summary>/// <param name="cell"></param>/// <returns></returns>private static object GetValueType(ICell cell){if (cell == null)return null;switch (cell.CellType){case CellType.Blank: //BLANK:  return null;case CellType.Boolean: //BOOLEAN:  return cell.BooleanCellValue;case CellType.Numeric: //NUMERIC:  if (DateUtil.IsCellDateFormatted(cell)){return cell.DateCellValue;}return cell.NumericCellValue;case CellType.String: //STRING:  return cell.StringCellValue;case CellType.Error: //ERROR:  return cell.ErrorCellValue;case CellType.Formula: //FORMULA:  cell.SetCellType(CellType.String);return cell.StringCellValue;default:return "=" + cell.CellFormula;}}}
}

Form1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;namespace 增添excel测试
{public partial class Form1 : Form{public Form1(){InitializeComponent();}DataTable dt = new DataTable();string connString = @"Data Source=; Database = 测试; Integrated Security=true";SqlConnection conn;private void bind(string fileName){string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source=" + fileName + ";" +"Extended Properties='Excel 8.0; HDR=Yes; IMEX=1'";OleDbDataAdapter da = new OleDbDataAdapter("SELECT *  FROM [Sheet1$]", strConn);DataSet ds = new DataSet();try{da.Fill(ds);dt = ds.Tables[0];this.dataGridView1.DataSource = dt;}catch (Exception err){MessageBox.Show("操作失败!" + err.ToString());}}private void insertToSql(DataRow dr){//excel表中的列名和数据库中的列名一定要对应  string name = dr["L1"].ToString();string sex = dr["L2"].ToString();string no = dr["L3"].ToString();//string major = dr["无量纲承载力F"].ToString();string sql = "insert into [Sheet1$] values('" + name + "','" + sex + "','" + no + "')";this.textBox1.Text += "HHH"+sql;SqlCommand cmd = new SqlCommand(sql, conn);cmd.ExecuteNonQuery();}//导入excel到dategridviewprivate void button1_Click_1(object sender, EventArgs e){OpenFileDialog openFile = new OpenFileDialog();if (openFile.ShowDialog() == DialogResult.OK){string filePath = openFile.FileName;DataTable excelDt = WindowsFormsApp1.ExcelHelper.ReadFromExcel(filePath);//把Excel读取到DataTable里面 然后再把DataTable存入数据库dataGridView1.DataSource = excelDt;}}//将Datagridview1的记录插入到数据库private void button2_Click(object sender, EventArgs e){conn = new SqlConnection(connString);conn.Open();DataTable dtt = (DataTable)dataGridView1.DataSource;textBox1.Text = "SD:" + dtt.Rows.Count;if (dataGridView1.Rows.Count > 0){DataRow dr = null;for (int i = 0; i < dtt.Rows.Count; i++){dr = dtt.Rows[i];insertToSql(dr);}conn.Close();MessageBox.Show("导入成功!");}else{MessageBox.Show("没有数据!");}}//加入private void button3_Click(object sender, EventArgs e){this.Hide();Form2 form2 = new Form2();form2.Show();}}
}

Form2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 增添excel测试
{public partial class Form2 : Form{public Form2(){InitializeComponent();}DataTable dt = new DataTable();string connString = @"Data Source=; Database = 测试; Integrated Security=true";SqlConnection conn;private void insertToSql(DataRow dr){//excel表中的列名和数据库中的列名一定要对应  string name = dr[0].ToString();string sex = dr[1].ToString();string no = dr[2].ToString();//string major = dr["无量纲承载力F"].ToString();string sql = "insert into [Sheet1$] values('" + name + "','" + sex + "','" + no + "')";this.textBox1.Text += "HHH" + sql;SqlCommand cmd = new SqlCommand(sql, conn);cmd.ExecuteNonQuery();}//未绑定数据源dategridview转datatableprivate static DataTable GetDgvToTable(DataGridView dgv){DataTable dt = new DataTable();// 列强制转换for (int count = 0; count < dgv.Columns.Count; count++){System.Data.DataColumn dc = new System.Data.DataColumn(dgv.Columns[count].Name.ToString());dt.Columns.Add(dc);}// 循环行for (int count = 0; count < dgv.Rows.Count; count++){DataRow dr = dt.NewRow();for (int countsub = 0; countsub < dgv.Columns.Count; countsub++){dr[countsub] = Convert.ToString(dgv.Rows[count].Cells[countsub].Value);}dt.Rows.Add(dr);}return dt;}private void button1_Click(object sender, EventArgs e){dataGridView1.Rows.Add();}//保存private void button2_Click(object sender, EventArgs e){conn = new SqlConnection(connString);conn.Open();textBox1.Text = "SD:" + dataGridView1.Rows[0].Cells[0].Value.ToString();DataTable dtt = GetDgvToTable(dataGridView1);textBox1.Text = "SD:" + dtt.Rows.Count;if (dataGridView1.Rows.Count > 0){DataRow dr = null;for (int i = 0; i < dtt.Rows.Count; i++){dr = dtt.Rows[i];//textBox1.Text+= "HH:" + dr["L1"].ToString();insertToSql(dr);}conn.Close();MessageBox.Show("导入成功!");}else{MessageBox.Show("没有数据!");}}}
}

 

成品演示

C#excel导入dategridview

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dtaidistance笔记:dtw_ndim (高维时间序列之间的DTW)

1 数据 第一个维度是sequence的index&#xff0c;每一行是多个元素&#xff08;表示这一时刻的record&#xff09; from dtaidistance.dtw_ndim import *s1 np.array([[0, 0],[0, 1],[2, 1],[0, 1],[0, 0]], dtypenp.double) s2 np.array([[0, 0],[2, 1],[0, 1],[0, .5],[0…

Elasticsearch--解决磁盘使用率超过警戒水位线

原文网址&#xff1a;Elasticsearch--解决磁盘使用率超过警戒水位线_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决ES磁盘使用率超过警戒水位线的问题。 问题描述 当客户端向 Elasticsearch 写入文档时候报错&#xff1a; cluster_block_exception [FORBIDDEN/12/inde…

Qt进程和线程

一、进程 在设计一个应用程序时,有时不希望将一个不太相关的功能集成到程序中,或者是因为该功能与当前设计的应用程序联系不大,或者是因为该功能已经可以使用现成的程序很好的实现了,这时就可以在当前的应用程序中调用外部的程序来实现该功能,这就会使用到进程。Qt应用程序…

亿胜盈科 HT4182,HT4186,HT4188 电量均衡 同步升压型 双节理电池充电器

HT4182&#xff0c;HT4186&#xff0c;HT4188是一款5V输入&#xff0c;升压模式的充电管理IC&#xff0c;适用于双节串联鲤电池。其能自适应任意5V电源进行充电&#xff0c;并且由输入过压、欠压保护。 HT4182&#xff0c;HT4186&#xff0c;HT4188采用同步升压结构&#xff0…

基于单片机出租车计价器控制系统

**单片机设计介绍&#xff0c;基于单片机出租车计价器控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的出租车计价器控制系统是一个用于控制和管理出租车费用计算的电子设备。下面是一个简单的系统设计介绍&…

Windows 下 PyTorch 入门深度学习环境安装与配置 GPU 版

1.确定自己的硬件信息&#xff0c;确定电脑有英伟达 (NVIDIA)显卡 在任务栏上右键打开任务管理器 2.下载安装 Anaconda &#xff08;建议安装迅雷下载&#xff0c;同时浏览器添加扩展 “迅雷Chrome支持”&#xff09; https://www.anaconda.com/ https://repo.anaconda.com/arc…

文本编辑软件:Ulysses mac介绍说明

Ulysses mac是面向 Mac、iPhone 和 iPad 的一站式写作环境。Ulysses 提供令人愉悦、专注的写作体验&#xff0c;加上高效文稿管理、无缝同步以及灵活导出。markdown 可以直接对于文本进行不同类型的分类、编辑&#xff0c;比如标题、注解、评论之类的内容。 Ulysses让注意力专…

嵌入式学习---ARM中断控制系统

目录 外部事件与CPU的交互方式查询方式中断方式 什么是中断源S3C2440支持60个中断源FIQ和IRQ 中断处理流程将外设中断通知给CPUSUBSRCPND寄存器INTSUBMSK寄存器SRCPND寄存器INTMSK寄存器INTMOD寄存器INTPND寄存器 硬件中断处理是实时系统设计的最重要、最关键的问题。 外部事件…

Linux shell编程学习笔记33:type 命令

目录 0 引言1 type 命令的功能和格式 1.1 type命令的功能1.2 type 命令的格式2 type命令用法实例 2.1用type命令查看shell内置命令&#xff08;以echo命令为例&#xff09;2.2 用type命令查看别名&#xff08;以ls命令为例&#xff09;2.3 用type命令同时查看shell内置命令和别…

抽象类和接口(超重点!!)

[本节目标] 1.抽象类 2.接口 3.Object类 1.抽象类 1.1 抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&a…

LabVIEW发开发电状态监测系统

LabVIEW发开发电状态监测系统 对发电设备的持续监测对于确保可靠的电力供应至消费者极为重要。它不仅能够及时提醒操作员注意发电设备的潜在损坏&#xff0c;还能减少由于设备故障造成的停机时间。为了达到这一目标&#xff0c;开发了一款基于LabVIEW的软件&#xff0c;专门用…

C语言进阶之路之内存镜像与字符操作函数篇

目录 一、学习目标&#xff1a; 二、内存镜像 什么是进程 C进程内存布局 栈内存 静态数据 数据段&#xff08;存储静态数据&#xff09;与代码段 堆内存 三、字符操作函数 函数strstr 函数strlen strlen与sizeof的区别 函数strtok 函数strcat与strncat 函数strc…

string类:`reserve()`,`resize()`详解

string类的重要接口说明(1)&#xff1a;reserve()&#xff0c;resize() 一、reserve() 和 resize() 注意不要把 reserve(储备) 和 reverse(逆向) 搞混了&#xff01; 1.1 reserve()&#xff1a;用于为字符串预留空间&#xff08;扩容&#xff09;&#xff0c;以便后续操作可以…

【MySQL数据类型】

目录&#xff1a; 前言数据类型分类整数类型tinyintbit 小数类型floatdecimal 字符串类型charvarchar日期和时间enum & set在集合中查找find_in_set 前言 剑指offer&#xff1a;一年又4天 数据类型分类 整数类型 tinyint 整数类型都分为有符号和无符号两种&#xff0c;默…

Linux重要基本命令

重要基本命令 1.ls命令 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常见的选项包括&#xff1a; -l&#xff1a;以长格式显示文件信息&#xf…

git 使用记录

远程仓库为空初始化 初始化本地仓库 git init 在本地仓库书写代码&#xff08;这里可以编辑一个文本文件做测试&#xff0c;如hello.txt&#xff09; 5&#xff09;执行&#xff1a;git add 要让git管理的文件&#xff08;git add hello.txt&#xff09;>执行完此操作将我…

手持机|三防智能手机_4寸/5寸/6寸安卓系统三防手机PDA手持终端方案

随着科技的不断发展&#xff0c;三防手持机作为一种多功能设备&#xff0c;正逐渐在各行业得到广泛应用。这款手持机采用高性能处理器&#xff0c;支持高精度北斗定位和工业本安防爆功能&#xff0c;并具备IP67级防水防尘性能和1.5米防跌落能力。因此&#xff0c;它在仓储管理、…

【Docker】从零开始:17.Dockerfile基本概念

【Docker】从零开始&#xff1a;17.Dockerfile 概述1.什么是Dockerfile2.Dockerfile构建三大步骤3.Docker执行Dockerfile流程 一张图理解Dockerfile常用保留指令~FROM~~MAINTAINER~~RUN~两种格式 ~EXPOSE~~WORKDIR~~USER~~ENV~~ADD~~COPY~两种格式 ~VOLUME~~CMD~两种格式注意 ~…

Mac端 DevEco Preview 窗口无法展示,提示文件中的node.dir错误

语雀知识库地址&#xff1a;语雀HarmonyOS知识库 飞书知识库地址&#xff1a;飞书HarmonyOS知识库 DevEco版本&#xff1a;Build Version: 3.1.0.501, built on June 20, 2023 环境信息 问题描述 打开 Preview 标签窗口后&#xff0c;提示Preview failed。 Run窗口提示如下 F…

Stable Diffusion AI绘画系列【18】:东方巨龙,威武霸气

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…