实现目标:程序启动,读入桌面的excel,数据即显示在datagridview组件中。
结果:
详细步骤:
1.添加并设置datagridview(从视图→工具箱里找),点右上角那个小三角形符号
2.代码如下
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;//设置该属性 为false 防止报错System.InvalidOperationException:“线程间操作无效: 从不是创建控件的线程访问它。”(这句是我做tcp通信用的,应该在这里用不到,但是保持代码完整性,就保留下来了)
//实例化DataTable来存放数据
DataTable dt = new DataTable();
string fileName = @"C:/Users/asus/Desktop/装配工艺卡片 (简化读入).xlsx";//文件地址
string sheetName = "sheet1";//Excel的工作表名称
bool isColumnName = true;//判断第一行是否为标题列
IWorkbook workbook;//创建一个工作薄接口
string fileExt = Path.GetExtension(fileName).ToLower();//获取文件的拓展名
//创建一个文件流
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
if (fileExt == ".xlsx")
{
workbook = new XSSFWorkbook(fs);
}
else
{
workbook = null;
}
//实例化sheet
ISheet sheet = null;
if (sheetName != null && sheetName != "")//判断是否存在sheet
{
sheet = workbook.GetSheet(sheetName);
if (sheet == null)
{
sheet = workbook.GetSheetAt(0);//从第一个开始读取,0位索引
}
else
{
sheet = workbook.GetSheetAt(0);
}
}
//获取表头
IRow header = sheet.GetRow(sheet.FirstRowNum);
int startRow = 0;//数据的第一行索引
if (isColumnName)//表示第一行是列名
{
startRow = sheet.FirstRowNum + 1;//数据从第二行开始读
//遍历表的第一行,即所有的列名
for (int i = header.FirstCellNum; i < header.LastCellNum; i++)
{
ICell cell = header.GetCell(i);
if (cell != null)
{
//获取列名的值
string cellValue = cell.ToString();
if (cellValue != null)
{
DataColumn col = new DataColumn(cellValue);
dt.Columns.Add(col);
}
else
{
DataColumn col = new DataColumn();
dt.Columns.Add(col);
}
}
}
}
//读取数据
for (int i = startRow; i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
if (row == null)
{
continue;
}
DataRow dr = dt.NewRow();
for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
{
if (row.GetCell(j) != null)
{
dr[j] = row.GetCell(j).ToString();
}
}
dt.Rows.Add(dr);
}
}
dataGridView1.DataSource = dt;
}