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

posted @ 2021-02-23 21:15  Alexander8527  阅读(2316)  评论(0编辑  收藏  举报