首页 > 其他分享 > 关于NPOI操作(二) 导出数据到文件

关于NPOI操作(二) 导出数据到文件

时间:2022-11-10 16:05:07浏览次数:39  
标签:文件 string 导出 NPOI workbook var response row

       经常收到研发支援单, 需要帮客户导出 某主题/某活动下某些成百上千的指定用户上传的文件(图片,视频等), 本来管理后台是有导出功能的, 但是达不到客户心血来潮的要求,  有时候时客户退租,需要拷贝上传数据,索性就花费了午休时间, 封装了一个Winform工具,  丢给运营支持,  以后就不会再来找研发, 毕竟大家都很忙.  话不多说先上思路,   其实很简单, sql 查询捞出 活动-用户-文件url 等信息保存到excle,  或者客户会直接提供这些文件信息,  这都是前提,  那么在此前提下, 只需要用程序去读取文件将里面的数据一一 下载下来就好.

      第一步, 创建 winform 窗体程序,  引用NPOI 库, 和日志Nlog, 直接掠过.

      第二步, 封装一个Helper 类 , 将Excel 文件读取到Table 中, 先行后列

        /// <summary>
        /// 读取excel文件数据到DataTable
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="deleteFile"></param>
        /// <returns></returns>
        public static DataTable ReadExcelToTable(string filePath, bool deleteFile = false)
        {
            using (var tempFile = new FileStream(filePath, FileMode.Open))
            {
                //var workbook = new WorkbookFactory.Create(fs);
                IWorkbook workbook = WorkbookFactory.Create(tempFile);
                var dataTable = new DataTable();
                //读取栏位行数据
                var sheet = workbook.GetSheetAt(0);
                var tableHeadRow = sheet.GetRow(0);
                for (int i = 0; i < tableHeadRow.PhysicalNumberOfCells; i++)
                {
                    var headCell = tableHeadRow.Cells[i];
                    dataTable.Columns.Add(new DataColumn(headCell.StringCellValue));
                }
                //读取数据行
                for (int s = 0; s < workbook.NumberOfSheets; s++)
                {
                    var sheetData = workbook.GetSheetAt(s);
                    for (int i = 1; i < sheetData.PhysicalNumberOfRows; i++)
                    {
                        var row = sheetData.GetRow(i);
                        var newRow = dataTable.NewRow();
                        for (int j = 0; j < row.PhysicalNumberOfCells; j++)
                        {
                            var cell = row.Cells[j];
                            cell.SetCellType(CellType.String);
                            newRow[j] = cell.StringCellValue;
                        }
                        dataTable.Rows.Add(newRow);
                    }
                }
                workbook.Close();
                if (deleteFile)
                {
                    File.Delete(filePath);
                }
                return dataTable;
            }
        }

      第三步.  粗糙的 UI界面控件

 

       第四步,  下载功能, 读取Table, 写文件 (条件那些校验已省略)

        //遍历线程下载
        public void TaskDwonFile(DataTable table)
        {
           
                //创建文件
                var path = ConfigurationManager.AppSettings.Get("SavePath");
                Directory.CreateDirectory(path);
                string selectTend = ckExtend.Checked ? comboBox1.Text: string.Empty;
                Task.Factory.StartNew(() =>
                {
                    int i = 10001;
                    foreach (DataRow row in table.Rows)
                    {
                        try
                        {
                            i++;
                            var Id = row[txtId.Text].ToString();  //标识
                            var userId = row[txtUserId.Text].ToString();  //用户Id
                            var userName = row[txtname.Text].ToString(); //用户名
                            var urlPath = row[txtfilepath.Text].ToString();  //文件路径
                            var file = urlPath.Split('/');
                            var tempExtend = Path.GetExtension(urlPath);  //取后缀
                            var extend = string.IsNullOrEmpty(tempExtend) ? selectTend : tempExtend;
                            var savePath = path + "/" + userId + "_" + userName + "_" + i + extend;  //拼接完整路径
                            DwonImg(urlPath, savePath);  //下载
                        }
                        catch (Exception ex)
                        {
                            NlogHelper.Default.Error("导入异常,{0}", ex);
                            continue;
                        }
                    }
                });
        }

     第五步:  下载文件读取流

        public void DwonImg(string url, string savePath)
        {
            WebResponse response = null;
            Stream stream = null;
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                response = request.GetResponse();
                stream = response.GetResponseStream();
                if (!response.ContentType.ToLower().StartsWith("text/"))
                {
                    SaveBinaryFile(response, savePath);
                }
            }
            finally
            {
                if (stream != null) stream.Close();
                if (response != null) response.Close();
            }
        }

 

如此 ,根据以上一番操作,打包bin文件后, 运营同学可以自由自在的满足用户下载文件的需求

 

标签:文件,string,导出,NPOI,workbook,var,response,row
From: https://www.cnblogs.com/Sientuo/p/16877126.html

相关文章

  • SpringMVC的单文件上传,多文件上传和下载文件(十二)
    你未看此花时,则此花与汝心同归于寂,你来看此花时,此花颜色一时明白起来,便知此花不在你的心外。上一章简单介绍了SpringMVC的数据验证和JSR303国际化显示(十一),如果没有看......
  • SpringBoot上传和下载文件(二十七)
    当死亡来临,每一个人都不会接受自己的命运,他们会反抗.上一章简单介绍了SpringBoot启用Https(二十六),如果没有看过,​​请观看上一章​​文件上传和下载,是常用的功能可以看老......
  • 文件操作--设置文件属性、获取文件属性
    1.设置文件属性:SetFileAttributes(文件名,属性值)BOOLWINAPI​​SetFileAttributes​​(_In_ LPCTSTRlpFileName,_In_ DWORD  dwFileAttributes);SetFil......
  • VS各种工程文件说明
    一、sln文件.sln(Solution)解决方案文件,表示一个项目组,他通常包含一个项目中所有的工程文件信息。二、suo文件suo(SolutionUserOptions)解决方案用......
  • cafffe 利用h5py生成多标签h5文件并训练
    h5py生成多标签h5文件importh5pyimportnumpyasnpdefmain():f=h5py.File('train00.h5','w')f.create_dataset('data',(1200,128),dtype='f8')f.create_data......
  • linux 从内存中恢复已删除的文件
    ps-ef|greppython3或者lsof|grep<文件绝对路径>查看打开文件的进程号cd/proc/<进程号>/fd/ll查看当前目录下数字和文件的映射cat<文件对应的数字>><想要恢......
  • 前段使用get获取文件流,实现下载
    functiondownLoad(){    constiframe=document.createElement('iframe')    iframe.style.display='none'    iframe.style.height=......
  • python 解构生成的可执行文件(如main.exe)
    python打包成的main.exe中包含了哪些东西,可以通过以下命令解压到当前目录下一个名为 main.exe_extracted的文件夹中:pythonpyinstxtractor.pymainx.exe文件pyi......
  • PostMan测试文件下载功能
     配置好参数之后点击    这样就会有个弹框弹出来让你选择下载路径了,不同版本可能不一样但是按钮应该差不多 ......
  • Python批量创建文件和文件夹
    Python批量创建文件和文件夹前言:本来计划利用windows批处理脚本批量创建文件和文件夹(文件和文件名称顺序命名),编写批处理脚本过程中,出现很多问题难以解决,耗费时间过多。既......