DataGridView输出或保存为Excel文件(支持超过65536行多Sheet输出)

简介: ///         /// DataGridView控件数据导出到Excel,可设定每一个Sheet的行数        /// 建立多个工作表来装载更多的数据        ///         /// DataGridView控件        /// 保存的文件路径     ...
///   <summary>

        
///  DataGridView控件数据导出到Excel,可设定每一个Sheet的行数
        
///  建立多个工作表来装载更多的数据
        
///   </summary>

        
///   <param name="ExportGrid"> DataGridView控件 </param>

        
///   <param name="fullFileName"> 保存的文件路径 </param>

        
///   <param name="SheetRowsCount"> 每一个Sheet的行数 </param>

        
///   <param name="IsOpenFile"> 是否打开文件 </param>

        
///   <returns> True/False </returns>

         public  bool OutputFileToExcel(DataGridView ExportGrid,  string fullFileName,  int SheetRowsCount,  bool IsOpenFile)

        {

             int id =  0;

             bool ExportSuccess =  false;

             // 如果网格尚未数据绑定
             if (ExportGrid ==  null)

            {

                 return  false;

            }

             /// /Excel2003 工作表大小 65,536 行乘以 256 列 

             // if (ExportGrid.Rows.Count > 65536 || ExportGrid.ColumnCount > 256)

            
// {

            
//     return false;

            
// }

            
//  列索引,行索引
             int colIndex =  0;

             int rowIndex =  0;

             int objcetRowIndex =  0;

             // 总可见列数,总可见行数
             int colCount = ExportGrid.Columns.GetColumnCount(DataGridViewElementStates.Visible);

             int rowCount = ExportGrid.Rows.GetRowCount(DataGridViewElementStates.Visible);

             if (rowCount ==  0 || colCount ==  0)   // 如果DataGridView中没有行,返回
            {

                 return  false;

            }

             //  创建Excel对象                    

            Microsoft.Office.Interop.Excel.Application xlApp =  new Microsoft.Office.Interop.Excel.Application();

             if (xlApp ==  null)

            {

                 return  false;

            }

             //  创建Excel工作薄
            Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add( true);

            Microsoft.Office.Interop.Excel.Range range =  null;

            IntPtr t =  new IntPtr(xlApp.Hwnd);

 

             object oMissing = System.Reflection.Missing.Value;

             int JLevel =  0;

            JLevel =  int.Parse(Math.Ceiling((ExportGrid.RowCount +  0.00) / SheetRowsCount).ToString());

            xlBook.Worksheets.Add(oMissing, oMissing, JLevel -  1, oMissing);

             for ( int i =  1; i < xlBook.Worksheets.Count +  1; i++)

            {

                ((Microsoft.Office.Interop.Excel.Worksheet)xlBook.Worksheets[i]).Name =  " 数据表 " + i.ToString();

            }

             for ( int j =  1; j < JLevel +  1; j++)

            {

                colIndex =  0;

                objcetRowIndex =  0;

                Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.Worksheets.get_Item( " 数据表 " + j.ToString());

                 //  创建缓存数据
                 object[,] objData =  new  object[SheetRowsCount +  1, colCount];

                 //  获取列标题,隐藏的列不处理
                 for ( int i =  0; i < ExportGrid.ColumnCount; i++)

                {

                     if (ExportGrid.Columns[i].Visible)

                    {

                        objData[objcetRowIndex, colIndex++] = ExportGrid.Columns[i].HeaderText;

                         if (ExportGrid.Columns[i].ValueType.ToString() ==  " System.String ")

                        {

                             // 设置成文本型,有效避免将前置的0自动删除了
                            range = xlSheet.get_Range(xlSheet.Cells[ 1, colIndex], xlSheet.Cells[SheetRowsCount +  1, colIndex]);

                            range.NumberFormat =  " @ ";

                        }

                    }

                }

 

                 for ( int i = (j -  1) * SheetRowsCount; i < SheetRowsCount * j; i++)

                {

                    rowIndex++;

                    objcetRowIndex++;

                    colIndex =  0;

                     for ( int k =  0; k < ExportGrid.ColumnCount; k++)

                    {

                         if (ExportGrid.Columns[k].Visible)

                        {

                            objData[objcetRowIndex, colIndex++] = ExportGrid[k, rowIndex -  1].Value;

                        }

                    }

                    Application.DoEvents();

 

 

                     if (i >= ExportGrid.RowCount -  1)

                    {

                         break;

                    }

 

                }

                 //  写入Excel

                range = xlSheet.get_Range(xlSheet.Cells[ 11], xlSheet.Cells[SheetRowsCount +  1, colCount]);

                range.Value2 = objData;

                 // 设置列头格式
                range = xlSheet.get_Range(xlSheet.Cells[ 11], xlSheet.Cells[ 1, colCount]);

                range.Font.Bold =  true;

                range.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;

 

                 // 设置报表表格为最适应宽度
                xlSheet.Cells.EntireColumn.AutoFit();

                xlSheet.Cells.VerticalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;

                xlSheet.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlLeft;

                xlSheet.UsedRange.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;

            }

 

             //  保存
             try

            {

                xlBook.Saved =  true;

                xlBook.SaveCopyAs(fullFileName);

                ExportSuccess =  true;

            }

             catch

            {

                ExportSuccess =  false;

            }

             finally

            {

                 // 释放资源,关闭进程
                xlApp.Quit();

                GetWindowThreadProcessId(t,  out id);

                System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(id);

                p.Kill();

            }

             if (IsOpenFile ==  true)

            {

                HS.Audit.Utilite.FileOperate FO =  new HS.Audit.Utilite.FileOperate();

                FO.OpenFile(fullFileName);

            }

             return ExportSuccess;

        }
目录
相关文章
|
14天前
|
文字识别 Serverless 开发工具
【全自动改PDF名】批量OCR识别提取PDF自定义指定区域内容保存到 Excel 以及根据PDF文件内容的标题来批量重命名
学校和教育机构常需处理成绩单、报名表等PDF文件。通过OCR技术,可自动提取学生信息并录入Excel,便于统计分析和存档管理。本文介绍使用阿里云服务实现批量OCR识别、内容提取、重命名及导出表格的完整步骤,包括开通相关服务、编写代码、部署函数计算和设置自动化触发器等。提供Python示例代码和详细操作指南,帮助用户高效处理PDF文件。 链接: - 百度网盘:[链接](https://pan.baidu.com/s/1mWsg7mDZq2pZ8xdKzdn5Hg?pwd=8866) - 腾讯网盘:[链接](https://share.weiyun.com/a77jklXK)
49 5
|
27天前
|
文字识别 BI
【图片型PDF】批量识别扫描件PDF指定区域局部位置内容,将识别内容导出Excel表格或批量改名文件,基于阿里云OCR对图片型PDF识别改名案例实现
在医疗和政务等领域,图片型PDF文件(如病历、报告、公文扫描件)的处理需求广泛。通过OCR技术识别这些文件中的文字信息,提取关键内容并保存为表格,极大提高了信息管理和利用效率。本文介绍一款工具——咕嘎批量OCR系统,帮助用户快速处理图片型PDF文件,支持区域识别、内容提取、导出表格及批量改名等功能。下载工具后,按步骤选择处理模式、进行区域采样、批量处理文件,几分钟内即可高效完成数百个文件的处理。
117 8
|
3月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
353 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
3月前
|
Python
批量将不同的工作簿合并到同一个Excel文件
本文介绍如何使用Python的`pandas`库批量合并不同工作簿至同一Excel文件。通过模拟生成三个班级的成绩数据,分别保存为Excel文件,再将这些文件合并成一个包含所有班级成绩的总成绩单。步骤包括安装必要库、生成数据、保存与合并工作簿。
81 6
|
3月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分为多个工作表。本文通过一个具体示例,展示了如何根据学生班级将成绩数据拆分到不同的工作表中,并生成一个包含总成绩表和各班级成绩表的Excel文件。代码简洁明了,适合初学者学习和应用。
72 6
|
3月前
|
Python
按条件将Excel文件拆分到不同的工作表
使用Python的pandas库,可以轻松将Excel文件按条件拆分到不同的工作表中。本文通过一个示例代码展示了如何生成一个包含总成绩表和三个班级表的Excel文件。代码首先创建了一个包含学生姓名、班级和各科成绩的数据框,然后按班级分组,将每个班级的数据分别写入不同的工作表。最后,生成的Excel文件将包含四个工作表,分别为总成绩表和三个班级的成绩表。
56 6
按条件将Excel文件拆分到不同的工作表
|
4月前
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
58 1
|
4月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
229 4
|
5月前
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
253 6
|
5月前
|
前端开发 JavaScript API
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
前端基于XLSX实现数据导出到Excel表格,以及提示“文件已经被损坏,无法打开”的解决方法
378 0

热门文章

最新文章