using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using NPOI;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;
namespace duquExcel2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//============读取Excel=======开始================
//实例化DataTable来存放数据
DataTable dt = new DataTable();
string fileName = @"D:\SelfProj\C#\20230416\duquexcel2\pl.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;
//============读取Excel=======结束================
//============修正预览界面=======开始================
//禁用DataGridView控件的排序功能
for (int zz = 0; zz < dataGridView1.Columns.Count; zz++)
dataGridView1.Columns[zz].SortMode = DataGridViewColumnSortMode.NotSortable;
//设置DataGridView控件中的数据以各行换色的形式显示
foreach (DataGridViewRow dgvRow in dataGridView1.Rows)//遍历所有行
{
if (dgvRow.Index % 2 == 0)//判断是否是偶数行
{
//设置偶数行颜色
dataGridView1.Rows[dgvRow.Index].DefaultCellStyle.BackColor = Color.LightSkyBlue;
}
else//奇数行
{
//设置奇数行颜色
//dataGridView1.Rows[dgvRow.Index].DefaultCellStyle.BackColor = Color.LightBlue;
}
}
dataGridView1.ReadOnly = true;//设置dataGridView1控件的ReadOnly属性,使其为只读
//设置dataGridView1控件的DefaultCellStyle.SelectionBackColor属性,使选中行颜色变色
dataGridView1.DefaultCellStyle.SelectionBackColor = Color.LightSkyBlue;
//============修正预览界面=======结束================
}
private void Form1_Load(object sender, EventArgs e)
{
//============修正预览界面=======开始================
dataGridView1.AllowUserToAddRows = false;//禁止添加行
dataGridView1.AllowUserToDeleteRows = false;//禁止删除行
//设置SelectionMode属性为FullRowSelect使控件能够整行选择
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
//============修正预览界面=======结束================
}
}
}