WPF实现Excel导入
1. 方式#
C#操作Excel主要有以下几种方式:
1).COM
说明:利用Office 的Excel组件来操作excel文件
优点:能够完全操作Excel文件,生成丰富文件内容
缺点:需要电脑安装Excel,会启动Excel进程这在web上很不方便
2).OpenXML
说明:一个操作字处理文档的组件包括Excel
优点:能够操作操作Excel2007版本文件
缺点:只能够操作Excel2007文件
3).NPOI
说明:一个开源的Excel读写库
优点:不需要安装Excel
缺点:只能够操作Excel2003文档,对文档内容控制不完全
4).OleDb
说明:使用Microsoft Jet 提供程序用于连接到 Excel 工作簿,将Excel文件作为数据源来读写
优点:简单快速,能够操作高版本Excel
缺点:只能够进行有限的操作(读、写)
在这里,我们使用第一个,利用Office 的Excel组件来操作excel文件。
2. 方法#
1)添加组件#
右击引用 ==> 添加引用 ==> 搜索框输入”excel“ ==> 选中Microsoft Excel 16.0 Object Library ==> 确定
2)在后端添加引用#
using Microsoft.Office.Interop.Excel;
using System.Data;
3)进入工作表#
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
Workbook workbook = app.Application.Workbooks.Open(Fp1); //Fp1 为使用OpenFileDialog获取的文件路径。
Worksheet st = workbook.Worksheets[1];
4)新建datatable并将Excel数据复制到datatable中#
这是根据我们学校学生成绩表模板设置的读取方式,其他模板样式的表格读取可能会出现数据读取不全的情况。
DataTable ExcelTable = new DataTable();
int c = 1;
while (st.Cells[5, c].Value != null)
{
c++;
}
int r = 5;
while (st.Cells[r, 1].Value != null)
{
r++;
}
ExcelTable.Columns.Add(st.Cells[5, 1].Value.ToString(), typeof(String));
ExcelTable.Columns.Add(st.Cells[5, 2].Value.ToString(), typeof(string));
ExcelTable.Columns.Add(st.Cells[5, 3].Value.ToString(), typeof(string));
for (int k = 4; k < c; k++)
{
ExcelTable.Columns.Add(st.Cells[5, k].Value.ToString(), typeof(Int32))
}
object[,] SheetArr = st.Range["A6:Z490"].Value;
for (int i = 0; i < r - 6; i++)
{
var NR = ExcelTable.NewRow();
NR[0] = Convert.ToString(SheetArr[i + 1, 1]);
NR[1] = Convert.ToString(SheetArr[i + 1, 2]);
NR[2] = Convert.ToString(SheetArr[i + 1, 3]);
for (int j = 3; j < c - 1; j++)
{
NR[j] = Convert.ToInt16(SheetArr[i + 1, j + 1]);
}
ExcelTable.Rows.Add(NR);
这样Excel里面的数据就被读取出来了。我们可以在前端新建一个DataGrid,并显示Datatable里面的数据。
<Grid Margin="0,10,10,0" Grid.Row="0" Height="350">
<DataGrid Height="335" Width="545" Name="DG" CanUserAddRows="False"
HorizontalAlignment="Center" VerticalAlignment="Top" Margin="13,0,13.333,0"
FrozenColumnCount="3" CellStyle="{DynamicResource datatablecell}"/>
</Grid>
后端
DG.ItemsSource = ExcelTable.AsDataView();
3. 退出进程#
前面在分析利用Office 的Excel组件来操作Excel文件时会启动Excel进程,我们在读取完数据之后一定要退出进程,不然多读取几次后台爆满了。方法也很简单,一句话搞定。
app.Quit();
这样我们就实现了Excel的读取,并将内容显示了出来。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构