紧张的卡多希 2022-11-12 19:57 采纳率: 72.2%
浏览 39
已结题

winform将listview里的数据导出到excel里问题求解?

Winform里将Listview里的数据导出到excel里,为什么不行啊?或者有什么其他好的办法?
private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            try
            {
                if (listView2.Items.Count == 0)
                {
                    MessageBox.Show("列表为空!");
                }
                else
                {
                    //建2003文件版本的方法。新建工作簿。
                    HSSFWorkbook workbook2003 = new HSSFWorkbook();

                    //新建1个Sheet工作表        
                    workbook2003.CreateSheet("Sheet1");

                    //获取名称为Sheet1的工作表  
                    HSSFSheet SheetOne2003 = (HSSFSheet)workbook2003.GetSheet("Sheet1");

                    int itemCount = listView2.Items.Count; //listview的数据行数
                    int columnsCount = listView2.Columns.Count; //listview的列数

                    //对工作表先添加行,下标从0开始     有表头,所以+1                                                            
                    for (int i = 0; i < itemCount + 1; i++)
                    {
                        SheetOne2003.CreateRow(i);
                    }

                    //对每一行创建listView_pictures.Columns.Count个单元格  
                    HSSFRow SheetRow2003 = (HSSFRow)SheetOne2003.GetRow(0);  //获取Sheet1工作表的首行  
                    HSSFCell[] SheetCell2003 = new HSSFCell[columnsCount];
                    for (int i = 0; i < columnsCount; i++)
                    {
                        //依次为每行创建listView_pictures.Columns.Count个单元格
                        SheetCell2003[i] = (HSSFCell)SheetRow2003.CreateCell(i);
                        SheetCell2003[i].SetCellValue(listView2.Columns[i].Text);
                    }


                    for (int i = 0; i < itemCount; i++)
                    {
                        SheetRow2003 = (HSSFRow)SheetOne2003.GetRow(i + 1);  //获取Sheet1工作表的第2行(1)  
                        SheetCell2003 = new HSSFCell[columnsCount];
                        for (int j = 0; j < columnsCount; j++)
                        {

                            if (j <= 3)
                            {
                                SheetCell2003[j] = (HSSFCell)SheetRow2003.CreateCell(j);
                                SheetCell2003[j].SetCellValue(listView2.Items[i].SubItems[j].Text);


                            }
                            else if (j == columnsCount - 1)
                            {
                                SheetCell2003[j] = (HSSFCell)SheetRow2003.CreateCell(j);
                                if (string.Equals(listView2.Items[i].SubItems[j].Text, ""))
                                {
                                    SheetCell2003[j].SetCellValue(listView2.Items[i].SubItems[j].Text);
                                }
                                else
                                {
                                    SheetCell2003[j].SetCellValue(Int32.Parse(listView2.Items[i].SubItems[j].Text));
                                }

                            }
                            else
                            {
                                SheetCell2003[j] = (HSSFCell)SheetRow2003.CreateCell(j);
                                SheetCell2003[j].SetCellValue(Double.Parse(listView2.Items[i].SubItems[j].Text));

                            }

                        }
                        Console.WriteLine();
                    }

                    //保存excel文件
                    SaveFileDialog dlg = new SaveFileDialog();
                    dlg.Filter = "xls文件(*.xls)|*.xls";
                    dlg.FileName = "";
                    dlg.AddExtension = true;
                    dlg.RestoreDirectory = true;
                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        FileStream file2003 = new FileStream(dlg.FileName, FileMode.Create);
                        workbook2003.Write(file2003);
                        file2003.Close();
                        workbook2003.Close();
                    }

                    System.Diagnostics.Process.Start(dlg.FileName);//打开刚刚保存的Excel文件

                }
            }
            catch
            {

            }
        }

用代码块功能插入代码,请勿粘贴截图
  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-11-12 23:35
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月18日
  • 已采纳回答 11月18日
  • 创建了问题 11月12日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来