首页 > 编程语言 >C#将dataguidview与excel数据互相读写

C#将dataguidview与excel数据互相读写

时间:2024-04-02 16:22:51浏览次数:22  
标签:C# wk region excel pa dataguidview new xls

库需求

需要NPOI库(处理Excel表格库)
可在vs工具菜单栏中的NuGet包管理器中搜索NPOI下载·获得

效果简单预览

点击查看代码
private void btnRead_Click_1(object sender, EventArgs e)
        {

            #region  打开对话框,自定义选择要读取excel表格路径
            StringBuilder sbr = new StringBuilder();
            OpenFileDialog p = new OpenFileDialog();
            p.Filter = "格式|*.xls;*.xlsx";
            string pa = "";
            if (p.ShowDialog() == DialogResult.OK)
            {
                pa = p.FileName;
            }

            #endregion

            try //使用try可以获得要打开的excel表是否被占用信息
            {
                using (FileStream fs = File.OpenRead(pa))   //打开myxls.xls文件,用文件流方式
                {
                    #region 判断Excel版本
                    IWorkbook wk;
                    if (pa.IndexOf(".xlsx") > 0)// 2007版本
                    { wk = new XSSFWorkbook(fs); }
                    else if (pa.IndexOf(".xls") > 0) // 2003版本
                    { wk = new HSSFWorkbook(fs); }

                    else
                    {
                        wk = null;
                    }
                    //把xls文件中的数据写入wk中
                    #endregion

                    ISheet sheet = wk.GetSheetAt(0);   //读取当前表数据
                    #region DataGridView 必须要先创建列信息 这里模仿exccel行列的ADCB与123,分别为view的列头和行头
                    for (int i = 0; i < sheet.GetRow(0).LastCellNum; i++)
                    {
                        char o = 'A';
                        for (char j = 'A'; j < 'Z'; j++)
                        {
                            if ((i + 65) == j)
                            {
                                o = j;
                            }
                        }
                        dataGridView1.Columns.Add(i.ToString(), o.ToString());//添加列
                    }
                    #endregion

                    #region 将每一个excel的单元格内容写入view表中
                    for (int j = 0; j <= sheet.LastRowNum; j++)  //LastRowNum 是当前表的总行数
                    {
                        IRow row = sheet.GetRow(j);  //读取当前行数据

                        if (row != null)
                        {
                            string[] str = new string[row.LastCellNum];
                            for (int k = 0; k < row.LastCellNum; k++)  //LastCellNum 是当前行的总列数
                            {
                                ICell cell = row.GetCell(k);  //当前表行的格列单元
                                str[k] = cell.ToString();

                            }

                            dataGridView1.Rows.Add(str);
                            dataGridView1.Rows[j].HeaderCell.Value = (j + 1).ToString();//写入view单元格

                        }

                    }
                    #endregion
                }
            }
            catch (Exception ee)
            {

                MessageBox.Show(ee.Message);
            }


        }

点击查看代码
 private void btnWrite_Click(object sender, EventArgs e)
        {

            IWorkbook wb = new HSSFWorkbook();
            ISheet sh = wb.CreateSheet("zhiyuan");
            #region 将DataGridView数据遍历给Excel,都需要创建行列才能添加数据
            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
            {
                IRow row1 = sh.CreateRow(i);
                for (int j = 0; j < dataGridView1.Columns.Count - 1; j++)
                {
                    ICell icell2top = row1.CreateCell(j);
                    //这里SetCellValue()方法有多个重载,参数是什么类型,写入的数值对应excel的类型,excel数据类型有很多,如字符串、数值等
                    icell2top.SetCellValue(double.Parse(dataGridView1.Rows[i].Cells[j].Value.ToString()));


                }
            }
            #endregion
            #region 自定义保存Excek路径
            try
            {
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.Filter = "*.xls格式|*.xls|*.xlsx格式|*.xlsx";
                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {

                    using (FileStream stm = File.OpenWrite(saveFileDialog.FileName))
                    {
                        wb.Write(stm);
                        MessageBox.Show("保存成功");
                    }
                }

            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);

            }
            #endregion
        }

标签:C#,wk,region,excel,pa,dataguidview,new,xls
From: https://www.cnblogs.com/xiaocaosha/p/18110842

相关文章

  • C++ std常用math函数
    std::atan和std::atan2std::atan(x)  即tan(angle)=x  所求angle范围[-PI/2,PI/2] [-90°,90°]std::atan2(y,x)即tan(angle)=y/x 所求angle范围[-PI,PI][-180°,180°]  std::fmod(x,y)计算x/y的浮点余数,如std::fmod(3.1,2)=1.1对浮点数进行......
  • GPT-5:更强的ChatGPT!将在高级推理功能上实现重大进步!GPT-5有哪些功能作用?
    自Claude3发布以来,外界对GPT-5的期待越来越强。毕竟Claude3已经全面超越了GPT-4,成为迄今为止最强大模型。对于即将发布的GPT-5,有哪些期待?目前来说,GPT-5的将具备哪些新能力?GPT-5性能进步:GPT-5在高级推理功能上可以实现重大进步,性能改进将超出当前的预期,是类似GPT-3......
  • vue xxx.find is not a function;
    错误:1.后端获取数据集合,存到 vuex store 中和本地 window.localStorage;2.因为要解决刷新丢失问题在routeconfig中路由拦截重新 拿到本地数据window.localStorage 保存到store中;3.界面刷新报错:vuexxx.findisnotafunction分析:1.xxx类型确实不是数组;......
  • 点阵LED数码管显示驱动IC VK16K33 A/B/C/BA/AA 驱动电流大 质量稳定 适用于计量插座,数
    VK16K33是一种带按键扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有数据锁存器、键盘扫描、LED驱动模块等电路。数据通过I2C通讯接口与MCU通信。SEG脚接LED阳极,GRID脚接LED阴极,可支持16SEGx8GRID的点阵LED显示面板。最大支持13×3的按键。内置上电复位电路,整体闪烁频率可......
  • google_hacking_study
    简单了解一下GoogleHacking语法。这是goolehacking十个基本语法。""完全匹配据说匹配比较精准,但是我不加引号好像也没什么区别耶*模糊匹配、?表示单个字符,用通配符时要将引号将关键词括起来*.exe+逻辑与用了加号,那多个关键词都会出现在搜索结果的摘要中。gpt:GoogleHa......
  • CSS 定位
    相对定位相对定位相对的是自己原来的位置,开启相对定位的元素并没有脱离文档流,可以超出父容器的大小,与float区分有四个属性值:left、bottom、right、top左和右不能同时用,同时用时左生效;当一个元素右定位属性,这个元素的层级高于普通的元素;当两个元素都开启定位时,采用后来居上......
  • 使用 XCTU 进行 XBee 无线 (OTA) 固件更新
    通过X-CTU无线(OTA)更新固件:1.将XBee加载到XCTU。将此XBee模块AP参数设置为API模式1(AP=1)和波特率115200(BD=7)以加快进一步的步骤。   2.在无线模块列表中,选择“发现无线模块”按钮。 3.XCTU将执行网络发现。然后,您可以选择“添加所选设备”将远程......
  • MySQL数据库报错:Can‘t read dir of ‘/etc/mysql/conf.d/‘ (Errcode: 13 - Permissi
    在进行MySQL安装或初次配置的过程中,偶尔会遇到一些让人困惑的错误信息,这些错误可能会阻碍安装过程的顺利进行。本文旨在详细探讨MySQL安装过程中可能遇到的另一个具体错误,包括该错误的表现、原因以及解决步骤,以帮助用户有效地克服安装障碍。错误描述在MySQL的安装或启动过......
  • Echart——图表的基本使用及配置项
    目录一、基本使用二、各个配置项属性三、title配置项四、X轴(xAxis)与Y轴(yAxis)配置项五、颜色color配置项六、legend图例组件配置项七、 tooltip提示框组件配置项八、series基本使用与配置项一、基本使用Echarts官方文档:快速上手-Handbook-ApacheECharts配......
  • 高精度、低功耗、小封装电压检测芯片 HXWSEMI桦芯微HX61CC2202MR、HX61CC2702MR、HX61
    HX61C系列芯片是使用CMOS技术开发的高精度、低功耗、小封装电压检测芯片。检测电压在小温度漂移的情况下保持极高的精度。客户可选择CMOS输出或OpenDrain输出。■产品特点高精度:±2%低功耗:2.0µA(Vin=1.5V)检测电压范围:1.0V~6.0V,100mV步进工作电压范围:0.7V......