C#读写Excel,VS2019

一、利用NOPI读写Excel,通过Nuget安装NOPI
1.打开Nuget,工具->NuGet包管理工具->管理解决方案的NuGet程序包

2.搜索NOPI,并安装

3.安装完成

二、新建工程
1.添加panel、dataGridView、按钮等控件,并为datagridview添加任意列,页面简单布局如下:

2.导出按钮代码:

         String filePath = "";//设置保存文件路径SaveFileDialog dailog = new SaveFileDialog();//设置文件类型 dailog.Filter = ".*|*.*|数据文件(*.mdf)|*.mdf|日志文件(*.ldf)|*.ldf";//设置默认文件类型显示顺序 dailog.FilterIndex = 1;//保存对话框是否记忆上次打开的目录 dailog.RestoreDirectory = true;//点了保存按钮进入 if (dailog.ShowDialog() == DialogResult.OK){filePath = dailog.FileName.ToString(); //获得文件路径 }else{return;}//把datagridview转成datatableDataTable dt = new DataTable();dt.Clear();foreach (DataGridViewColumn headerCell in dataGridView1.Columns){dt.Columns.Add(headerCell.HeaderText);}foreach (DataGridViewRow item in dataGridView1.Rows){DataRow dr = dt.NewRow();for (int i = 0; i < dt.Columns.Count; i++){if (item.Cells[i].Value != null){dr[i] = item.Cells[i].Value.ToString();}}            dt.Rows.Add(dr);}Npoi_Excel.Export(dt, filePath);System.Diagnostics.Process.Start("explorer.exe", filePath);

3.导入按钮代码:

         String filePath = "";OpenFileDialog dialog = new OpenFileDialog();//表示可以多选dialog.Multiselect = true;dialog.Filter = ".*|*.*";//过滤选项设置,文本文件,所有文件。dialog.FilterIndex = 1;//当前使用第二个过滤字符串dialog.RestoreDirectory = true;//对话框关闭时恢复原目录dialog.Title = "请选择文件";if (dialog.ShowDialog() == DialogResult.OK){for (int i = 1; i <= dialog.FileName.Length; i++){if (dialog.FileName.Substring(dialog.FileName.Length - i, 1).Equals(@"\")){//更改默认路径为最近打开路径filePath = dialog.FileName;}}}else{return;}DataTable dt = new DataTable();dt = Npoi_Excel.Import(filePath,0);if (dt != null){MessageBox.Show("122");//dataGridView1.DataSource = table;//通常只写这一句就可以了,但根据你的要求,用下面的循环也可以实现相同功能。dataGridView1.Columns.Clear();//清空列foreach (DataColumn column in dt.Columns){//为datagridview添加列,第一个参数是列名,第二个参数是列标题dataGridView1.Columns.Add(column.ColumnName, column.ColumnName);}dataGridView1.Rows.Clear();//清空行foreach (DataRow line in dt.Rows){//因为列已经一致了,所以直接将datatable的行转成数组就可以添加到datagridview中了dataGridView1.Rows.Add(line.ItemArray);}}

4.新建一个导入、导出Excel类Npoi_Excel

using NPOI.HSSF.UserModel;
using NPOI.HSSF.Util;
using NPOI.SS.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace Learning_Test
{class Npoi_Excel{/// <summary>/// 导出表格数据到 xls/// </summary>/// <param name="dt"></param>/// <param name="filePath"></param>public static void Export(DataTable dt, string filePath){if (!string.IsNullOrEmpty(filePath) && null != dt && dt.Rows.Count > 0){HSSFWorkbook book = new HSSFWorkbook();ISheet sheet = book.CreateSheet("Test");sheet.DefaultColumnWidth = 30;sheet.DefaultRowHeight = 1400;IRow row = sheet.CreateRow(0);//设置单元格样式ICellStyle style = book.CreateCellStyle();//创建单元格样式对象IFont font = book.CreateFont(); //创建字体样式对象//font.FontName = "方正舒体"; //和excel里面的字体对应//font.IsItalic = true; //斜体font.FontHeightInPoints = 16;//字体大小//font.Boldweight = short.MaxValue;//字体加粗style.SetFont(font); //将字体样式赋给样式对象style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;style.VerticalAlignment = VerticalAlignment.Center;for (int i = 0; i < dt.Columns.Count; i++){ICell cell = row.CreateCell(i);cell.SetCellValue(dt.Columns[i].ColumnName);cell.CellStyle = style;}for (int i = 0; i < dt.Rows.Count; i++){row = sheet.CreateRow(i + 1);for (int j = 0; j < dt.Columns.Count; j++){if (Convert.ToString(dt.Rows[i][j]).StartsWith("http")){String url = Convert.ToString(dt.Rows[i][j]);byte[] bytes = Bitmap_To_Byte.Url_To_Byte(url);row.CreateCell(j);//第二步:将图片添加到workbook中  指定图片格式 返回图片所在workbook->Picture数组中的索引地址(从1开始)int pictureIdx = book.AddPicture(bytes, PictureType.JPEG);//第三步:在sheet中创建画部IDrawing patriarch = sheet.CreateDrawingPatriarch();//第四步:设置锚点 (在起始单元格的X坐标0-1023,Y的坐标0-255,在终止单元格的X坐标0-1023,Y的坐标0-255,起始              单元格列数,行数,终止单元格列数,行数)IClientAnchor anchor = patriarch.CreateAnchor(0, 0, 1023, 255, j, i+1, j, i+1);//第五步:创建图片IPicture pict = patriarch.CreatePicture(anchor, pictureIdx);//添加链接//设置单元格的值ICell icell = row.CreateCell(j + 1);icell.SetCellValue("图片");icell.CellStyle = style;//创建URL链接HSSFHyperlink hssfHyperlink = new HSSFHyperlink(HyperlinkType.Url){Address = (Convert.ToString(dt.Rows[i][j])) };icell.Hyperlink = hssfHyperlink;}else{ICell cell = row.CreateCell(j);cell.SetCellValue(Convert.ToString(dt.Rows[i][j]));cell.CellStyle = style;}                       }}using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)){fs.Seek(0, SeekOrigin.Begin);book.Write(fs);}book = null;}}/// <summary>/// 从 Xls文件导入数据到 DataTable/// </summary>/// <param name="filePath"></param>/// <param name="SheetName"></param>/// <returns></returns>public static DataTable Import(string filePath, String SheetName){HSSFWorkbook hssfworkbook;using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)){hssfworkbook = new HSSFWorkbook(file);}ISheet sheet = hssfworkbook.GetSheet(SheetName);if (sheet == null){return new DataTable();}System.Collections.IEnumerator rows = sheet.GetRowEnumerator();DataTable dt = new DataTable(SheetName);for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++){ICell cell = sheet.GetRow(0).Cells[j];dt.Columns.Add(cell.ToString());}rows.MoveNext();while (rows.MoveNext()){HSSFRow row = (HSSFRow)rows.Current;DataRow Row = dt.NewRow();for (int i = 0; i < row.LastCellNum; i++){ICell cell = row.GetCell(i);Row[i] = cell == null ? null : cell.ToString();}dt.Rows.Add(Row);}hssfworkbook.Close();hssfworkbook = null;return dt;}/// <summary>/// 从 Xls文件导入数据到 DataTable/// </summary>/// <param name="filePath"></param>/// <param name="SheetName"></param>/// <returns></returns>public static DataTable Import(string filePath, Int32 SheetIndex){HSSFWorkbook hssfworkbook;using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)){hssfworkbook = new HSSFWorkbook(file);}ISheet sheet = hssfworkbook.GetSheetAt(SheetIndex);String SheetName = hssfworkbook.GetSheetName(SheetIndex);if (sheet == null){return new DataTable();}System.Collections.IEnumerator rows = sheet.GetRowEnumerator();DataTable dt = new DataTable(SheetName);for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++){ICell cell = sheet.GetRow(0).Cells[j];dt.Columns.Add(cell.ToString());}rows.MoveNext();while (rows.MoveNext()){HSSFRow row = (HSSFRow)rows.Current;DataRow Row = dt.NewRow();for (int i = 0; i < row.LastCellNum; i++){ICell cell = row.GetCell(i);Row[i] = cell == null ? null : cell.ToString();}dt.Rows.Add(Row);}hssfworkbook.Close();hssfworkbook = null;return dt;}}
}

4.新建一个将网络图片转为byte数据的类Bitmap_To_Byte

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;namespace Learning_Test
{class Bitmap_To_Byte{public static byte[] Url_To_Byte(String filePath){//第一步:读取图片到byte数组HttpWebRequest request = (HttpWebRequest)WebRequest.Create(filePath);byte[] bytes;using (Stream stream = request.GetResponse().GetResponseStream()){using (MemoryStream mstream = new MemoryStream()){int count = 0;byte[] buffer = new byte[1024];int readNum = 0;while ((readNum = stream.Read(buffer, 0,1024)) > 0){count = count + readNum;mstream.Write(buffer, 0, readNum);}mstream.Position = 0;using (BinaryReader br = new BinaryReader(mstream)){bytes = br.ReadBytes(count);}}}return bytes;}public static byte[] BitmapByte(Bitmap bitmap){//Bitmap bitmap = new Bitmap();using (MemoryStream stream = new MemoryStream()){bitmap.Save(stream, ImageFormat.Jpeg);byte[] data = new byte[stream.Length];stream.Seek(0, SeekOrigin.Begin);stream.Read(data, 0, Convert.ToInt32(stream.Length));return data;}}}
}

三、程序完成,启动后测试如下:
1.操作说明

2.导出后效果如图

C#通过NOPI读写Excel,并插入图片,VS2019相关推荐

  1. java 读取excel 图片_利用Java+POI 读写Excel文档向Excel中插入图片

    一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...

  2. [转载] 使用openpyxl模块向Excel中插入图片

    参考链接: Python | 使用openpyxl模块在Excel工作表中绘制图表 2 使用openpyxl模块向Excel中插入图片 示例Python实现结果展示 示例 向一个Excel表格中A1位 ...

  3. excel poi 加背景图_java 在Excel中插入图片 POI实现

    一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...

  4. python下载图片插入excel_Python向Excel中插入图片的简单实现方法

    本文实例讲述了Python向Excel中插入图片的简单实现方法.分享给大家供大家参考,具体如下: 使用Python向Excel文件中插入图片,这个功能之前学习xlwt的时候通过xlwt模块实现过.那时 ...

  5. NPOI在Excel中插入图片

    NPOI在Excel中插入图片 for (int i = 0; i < FeatureMapList.Count; i++){// 第二步:确定图片索引int pictureIdx = wk.A ...

  6. ecplise插入图片太大_【Excel里插入图片时很大怎么办?我想把他设置成自动适应表格的大小。】excel图片固定大小...

    excel插入自适应单元格大小图片 excel入的图片可以设置自适应单元格大小而变化,具体操作如下: 一.使具:excel2010 二.操作步骤: 1.进入excel2010,点击"插入&q ...

  7. java poi 在excel中插入图片

    java web中导出excel数据是常见的功能,最近遇到一个需求是在excel中插入图片.处理excel及其他微软办公系列软件常用的就是apache poi,它也是支持图片插入的.插入图片最主要的用 ...

  8. java中excel导入图片_java POI实现向Excel中插入图片

    做Web开发免不了要与Excel打交道.今天老大给我一个任务-导出Excel.开始想的还是蛮简单的,无非就是查找,构建Excel,response下载即可.但是有一点不同,就是要加入图片,就是这个加入 ...

  9. poi 向Excel中插入图片

    使用poi向excel中插入图片 直接上代码,我这里的图片是项目中的一个logo图片,所以是直接springboot读取本地文件的方式 主要解释一下定位图片位置的八个参数int dx1, int dy ...

  10. Java Poi 向excel中插入图片

    博客 package com.unicom.yangjiabin.utils;import java.awt.image.BufferedImage; import java.io.ByteArray ...

最新文章

  1. linux egg,Linux服务器部署egg,日志
  2. 【算法与数据结构】关于代码运行时间复杂度的计算方法
  3. linux安装java_Linux安装JDK完整步骤
  4. Runtime底层原理--动态方法解析、消息转发源码分析
  5. shell脚本中28个特殊字符的作用简明总结
  6. 网站服务器windows登陆密码忘记,网站服务器windows登陆密码忘记
  7. [Leedcode][JAVA][第990题][等式方程的可满足性][并查集]
  8. 重磅!国内公司欧卡智舶发布全球首个「城市内河无人船」数据集
  9. 746. Min Cost Climbing Stairs 题解
  10. 可视化技巧:分类问题中的决策面画法 (直观理解plt.contour的用法)
  11. POJO, VO什么的是个什么鬼?
  12. python-生成xlsx表格
  13. itest(爱测试) 4.1.1 发布,开源BUG 跟踪管理 敏捷测试管理软件
  14. Unity 彩色打印日志信息
  15. 软件的接口设计图_面向服务架构(SOA)的汽车软件分析和设计
  16. 0基础自学软件测试的渠道你知道哪些?
  17. 计算机专硕_2021年北京科技大学计算机专硕考研初复试考研经验分享、择校备考分析指导...
  18. 野田圣子、希尔顿、松下幸之助,都喝过马桶水吗? .
  19. CSS中一些渐变效果与透明
  20. 中国标准时间、2021-01-11T09:49:43.000+0000等各种时间的转换、各种时间处理

热门文章

  1. linux lammps 安装教程,LAMMPS安装总结
  2. 如何在matlab中建立水箱模型_水箱
  3. 手机也可以接USB摄像头了
  4. Gps经纬度转化关系
  5. 树莓派交叉编译USB转网卡驱动_incomplete
  6. 绿联USB2.0 USB外接网卡驱动
  7. cypress自动化--运行测试用例报告输出
  8. Activity启动模式singleTask模式
  9. TP6+JWT开发APP接口
  10. 如何将应用从Win7迁移到Win10 ?