C# vs2017 winForm 用Microsoft.Office.Interop.Excel导入Excel文件到datagridview(解决无法导入不规范Excel文件问题,但是导入速度很慢)
1.在项目引用NuGet中安装Microsoft.Office.Interop.Excel
2.在cs文件头部添加命名空间
using System.Reflection; using Excel = Microsoft.Office.Interop.Excel; using System.Diagnostics;
3.窗体界面(灰色部分是datagridview1)
4.代码部分
using System; using System.Windows.Forms; using System.Reflection; using Excel = Microsoft.Office.Interop.Excel; using System.Diagnostics; namespace InputExcelTest2 { public partial class Form_SelectFile : Form { public Form_SelectFile() { InitializeComponent(); } private void BtnCancel_Click(object sender, EventArgs e) { Close(); } private void BtnSelectFile_Click(object sender, EventArgs e) {//选择文件 openFileDialog1.Filter = "XLS文件|*.xls|XLSX文件|*.xlsx";//筛选文件类型 openFileDialog1.FileName = ""; if (openFileDialog1.ShowDialog() == DialogResult.OK) { OpenExcel(openFileDialog1.FileName); } openFileDialog1.Dispose(); } private void OpenExcel(string strFileName) { object missing = Missing.Value; Excel.Application excel = new Excel.Application();//启动excel程序 try { if (excel == null) { MessageBox.Show("无法访问Excel程序,请重新安装Microsoft Office Excel。"); } else { excel.Visible = false;//设置调用引用的Excel文件是否可见 excel.UserControl = true;//设置调用引用的Excel是由用户创建或打开的 // 以只读的形式打开EXCEL文件(工作簿)想了解这堆参数请访问https://msdn.microsoft.com/zh-cn/library/office/microsoft.office.interop.excel.workbooks.open.aspx Excel.Workbook wb = excel.Application.Workbooks.Open(strFileName, missing, true, missing, missing, missing, missing, missing, missing, true, missing, missing, missing, missing, missing); //取得第一个工作表 Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];//索引从1开始 //取得总记录行数(包括标题列) int rowCount = ws.UsedRange.Cells.Rows.Count; //得到行数 int colCount = ws.UsedRange.Cells.Columns.Count;//得到列数 //初始化datagridview1 dataGridView1.Rows.Clear(); dataGridView1.Columns.Clear(); //取得第一行,生成datagridview标题列(下标是从1开始的) for (int i = 1; i <= colCount; i++) { string cellStr = ws.Cells[1, i].Value2.ToString().Trim(); dataGridView1.Columns.Add("column"+i,cellStr); } //取得数据(不包括标题列) for(int i = 2; i <= rowCount; i++) {//循环行 int index = dataGridView1.Rows.Add(); if (ws.Rows[i] != null) { for(int j = 1; j <= colCount; j++) {//循环列 if (ws.Cells[i, j].Value2 == null) {//跳过空的单元格 continue; } dataGridView1.Rows[index].Cells[j-1].Value = ws.Cells[i, j].Value2.ToString().Trim(); } } } } } catch(Exception ex) { MessageBox.Show("读取Excel文件失败: "+ex.Message); } finally { CloseExcel(excel);//关闭Excel进程 } } private void CloseExcel(Excel.Application excel) {//关闭Excel进程 excel.Quit(); excel = null; Process[] procs = Process.GetProcessesByName("excel"); foreach (Process pro in procs) { pro.Kill();//杀掉进程 } GC.Collect(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App