调用NPOI库读写WPS创建的.xlsx表格(C#、Winform、海康相机二次开发)

预备材料:

下载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可以写入数据:

结束啦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值