预备材料:
下载NPOI库,在指定文件夹下创建好EXCEL并提前写好表头:
对datagridview控件设置以下属性:
代码:
命名空间导入:
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel; // xls 处理
using NPOI.XSSF.UserModel; // xlsx 处理
在类中输入以下代码:
private readonly string filePath = @"C:\CTSC28datesave\labxls.xlsx"; // 你的文件路径
加载WPS创建的表格
private void Form1_Load(object sender, EventArgs e)
{
LoadExcelToDataGridView();
}
private void LoadExcelToDataGridView()
{
try
{
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
// 修改为XSSFWorkbook处理.xlsx文件
XSSFWorkbook workbook = new XSSFWorkbook(fs); // 移除第二个参数
ISheet sheet = workbook.GetSheetAt(0);
// 动态获取表头(兼容WPS特殊格式)
IRow headerRow = sheet.GetRow(0);
DataTable dt = new DataTable();
// 动态创建列(根据实际表头)
for (int i = 0; i < headerRow.LastCellNum; i++)
{
dt.Columns.Add(headerRow.GetCell(i)?.ToString() ?? $"Column{i}");
}
// 从第二行开始读取数据
for (int rowIndex = 1; rowIndex <= sheet.LastRowNum; rowIndex++)
{
IRow row = sheet.GetRow(rowIndex);
if (row == null) continue;
DataRow dataRow = dt.NewRow();
for (int colIndex = 0; colIndex < dt.Columns.Count; colIndex++)
{
dataRow[colIndex] = row.GetCell(colIndex)?.ToString() ?? "";
}
dt.Rows.Add(dataRow);
}
dataGridView1.DataSource = dt;
}
}
catch (Exception ex)
{
MessageBox.Show($"WPS文件加载失败: {ex.Message}");
}
}
绑定button的点击事件:
private void button3_Click(object sender, EventArgs e)
{
try
{
// 1. 执行方案
VmSolution.Instance.SyncRun();
listBox1.Items.Add("方案执行一次成功");
listBox1.TopIndex = listBox1.Items.Count - 1;
// 2. 获取结果
VmProcedure vmProcessl = (VmProcedure)VmSolution.Instance["流程1"];
vmRenderControl1.ModuleSource = vmProcessl;
string ocrNum = vmProcessl.ModuResult.GetOutputInt("out0").pIntVal[0].ToString();
listBox1.Items.Add("结果:" + ocrNum);
listBox1.TopIndex = listBox1.Items.Count - 1;
label2.BackColor = (ocrNum == "1") ? Color.Lime : Color.Red;
// 3. 插入到DataGridView第二行第三列(新增行)
if (dataGridView1.DataSource is DataTable dt)
{
DataRow newRow = dt.NewRow();
newRow[0] = dt.Rows.Count + 1; // NO.列(自动编号)
newRow[1] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // 时间列
newRow[2] = ocrNum; // 结果列
dt.Rows.InsertAt(newRow, 0); // 插入到第二行(索引为1)
// 4. 同步保存到Excel源文件
SaveDataTableToExcel(dt, filePath);
}
}
catch (Exception ex)
{
MessageBox.Show($"操作失败:{ex.Message}");
}
}
运行后发现可直接加载表格数据(提前写了几个数据进去):
点击button可以写入数据:
结束啦!