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的读取,并将内容显示了出来。