zoukankan      html  css  js  c++  java
  • NPOI导出百万数据

    1、引用最新版的NPOI(2.4.1)

    2、调用本人NPOIHelper

    3、调用下面的导出helper

      1 #region 药物库存表导出1048576
      2         [HttpPost]
      3         public async Task<ApiRes<ExportModelRespon>> ExpDrugListStockExecl([FromBody]ExpDrugListStockRequest modelRequest)
      4         {
      5             
      6             string serverPath = HttpContext.Current.Server.MapPath("/RandResult/");
      7             Task.Factory.StartNew(() => getDrugListStock(modelRequest, serverPath));
      8             var baseModel = new ApiRes<ExportModelRespon>()
      9             {
     10                 Body = new ExportModelRespon(),
     11                 Message = "成功"
     12             };
     13             baseModel.Body.model = "";
     14             return baseModel;
     15         }
     16 
     17         private async void getDrugListStock(ExpDrugListStockRequest modelRequest, string serverPath)
     18         {
     19             Log4net.Error("药物库存表导出开始" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
     20 
     21             var fileInfoModel = _iSystemExportInfoServices.GetSystemExportInfoModel(projectInfoId, userId, (int)ReportTypeEnum.DrugListStockReport);
     22             if (fileInfoModel != null)
     23             {
     24                 fileInfoModel.IsSuccess = false;
     25                 if (1 != _iSystemExportInfoServices.UpSystemExportInfo(fileInfoModel))
     26                 {
     27                     throw new SeeException(5001, "", "");
     28                 }
     29             }
     30             else
     31             {
     32                 fileInfoModel = new TM_SystemExportInfo()
     33                 {
     34                     Id = Guid.NewGuid().ToString(),
     35                     CompanyId = companyId,
     36                     ProjectId = projectId,
     37                     ProjectInfoId = projectInfoId,
     38                     FilePath = "",
     39                     IsSuccess = false,
     40                     ReportType = (int)ReportTypeEnum.DrugListStockReport,
     41                     UserId = userId,
     42                     CreateTime = DateTime.Now,
     43                 };
     44                 if (1 != _iSystemExportInfoServices.AddSystemExportInfo(fileInfoModel))
     45                 {
     46                     throw new SeeException(5001, "", "");
     47                 }
     48             }
     49             #region  获取药物库存表
     50             string hospitalId = modelRequest.HospitalId;
     51             string language = modelRequest.Language;
     52             if (string.IsNullOrEmpty(hospitalId))
     53             {
     54                 hospitalId = _iDrugListServices.GetHospitalIds(userId, projectInfoId);
     55             }
     56             var model = _iDrugListServices.GetDrugListStockAll(projectInfoId, hospitalId, language);
     57             if (!_iUserGroupServices.IsBlindStatus(userId, projectInfoId))
     58             {
     59                 var drugListStockModels = model.DrugListStockModels;
     60                 var drugListStockDetailModels = model.DrugListStockDetailModels;
     61                 string baseDrug = LanguageTool.LanguageHelper.GetValue(language, "Code129");//不适用
     62                 foreach (var item in drugListStockModels)
     63                 {
     64                     item.DrugType = baseDrug;
     65                     item.DrugBatch = baseDrug;
     66                 }
     67                 foreach (var item in drugListStockDetailModels)
     68                 {
     69                     item.DrugType = baseDrug;
     70                     item.BatchNumer = baseDrug;
     71                     item.ExpiryDate = baseDrug;
     72                 }
     73 
     74             }
     75             string planNum = string.Empty;
     76             string projectName = string.Empty;
     77             string applicant = string.Empty;
     78             var ProjectMainModels = _iProjectServices.LoadEntities(p => p.ProjectId == projectId).FirstOrDefault();
     79             if (ProjectMainModels != null)
     80             {
     81                 planNum = ProjectMainModels.PlanNum;
     82                 projectName = ProjectMainModels.ProjectName;
     83                 applicant = ProjectMainModels.Applicant;
     84             }
     85             var projectTitalModel = new ProjectTitleModel
     86             {
     87                 PlanNum = planNum,
     88                 ProjectName = projectName,
     89                 Applicant = applicant
     90             };
     91             model.ProjectTitleModel = projectTitalModel;
     92             #endregion
     93 
     94             var hospitalName = LanguageTool.LanguageHelper.GetValue(language, "Code543");//库房|中心
     95             var drugType = LanguageTool.LanguageHelper.GetValue(language, "Code261");//药物治疗类型
     96             var drugBatch = LanguageTool.LanguageHelper.GetValue(language, "Code262");//批次
     97             var unpassNum = LanguageTool.LanguageHelper.GetValue(language, "Code252");//未放行
     98             var useNum = LanguageTool.LanguageHelper.GetValue(language, "Code253");//可用
     99             var retainNum = LanguageTool.LanguageHelper.GetValue(language, "Code557");//转运保留
    100             //var val7 = LanguageTool.LanguageHelper.GetValue(language, "Code558");//返还保留
    101             var sendNum = LanguageTool.LanguageHelper.GetValue(language, "Code259");//运送中
    102             //var val9 = LanguageTool.LanguageHelper.GetValue(language, "Code540");//返还中
    103             var freezeNum = LanguageTool.LanguageHelper.GetValue(language, "Code652");//冻结
    104             var quarantineNum = LanguageTool.LanguageHelper.GetValue(language, "Code256");//隔离
    105             var issueNum = LanguageTool.LanguageHelper.GetValue(language, "Code254");//已发放
    106             var backNum = LanguageTool.LanguageHelper.GetValue(language, "Code515");//已回收
    107             var destroyNum = LanguageTool.LanguageHelper.GetValue(language, "Code541");//已销毁
    108             var loseNum = LanguageTool.LanguageHelper.GetValue(language, "Code398");//丢失
    109             var invalidNum = LanguageTool.LanguageHelper.GetValue(language, "Code667");//作废废弃
    110             var stainedNum = LanguageTool.LanguageHelper.GetValue(language, "Code542");//污损损坏
    111             var dueNum = LanguageTool.LanguageHelper.GetValue(language, "Code257");//已过期
    112             Dictionary<string, string> dictionary = new Dictionary<string, string>()
    113             {
    114                 { hospitalName,"HospitalName"},
    115                 { drugType,"DrugType"},
    116                 { drugBatch,"DrugBatch"},
    117                 { unpassNum,"UnpassNum"},
    118                 { useNum,"UseNum"},
    119                 { retainNum,"RetainNum"},
    120                 { sendNum,"SendNum"},
    121                 { freezeNum,"FreezeNum"},
    122                 { quarantineNum,"QuarantineNum"},
    123                 { issueNum,"IssueNum"},
    124                 { backNum,"BackNum"},
    125                 { destroyNum,"DestroyNum"},
    126                 { loseNum,"LoseNum"},
    127                 { invalidNum,"InvalidNum"},
    128                 { stainedNum,"StainedNum"},
    129                 { dueNum,"DueNum"},
    130             };
    131             var drugNum = LanguageTool.LanguageHelper.GetValue(language, "Code497");//药物编号
    132             var drugTypes = LanguageTool.LanguageHelper.GetValue(language, "Code261");//药物治疗类型
    133             var batchNumer = LanguageTool.LanguageHelper.GetValue(language, "Code262");//批次
    134             var expiryDate = LanguageTool.LanguageHelper.GetValue(language, "Code247");//效期
    135             var hospitalNames = LanguageTool.LanguageHelper.GetValue(language, "Code543");//库房|中心
    136             var status = LanguageTool.LanguageHelper.GetValue(language, "Code498");//状态
    137             Dictionary<string, string> dictionarys = new Dictionary<string, string>()
    138             {
    139                 { drugNum,"DrugNum"},
    140                 { drugTypes,"DrugType"},
    141                 { batchNumer,"BatchNumer"},
    142                 { expiryDate,"ExpiryDate"},
    143                 { hospitalNames,"HospitalName"},
    144                 { status,"Status"},
    145             };
    146             List<ExcelNewModel> excelModels = new List<ExcelNewModel>();
    147             int maxCount = 1048576 - 5; //1048576是EXCEL2007的最大行数,-1是要去掉标题行
    148 
    149             var planNumCell = LanguageTool.LanguageHelper.GetValue(language, "Code121");//方案号
    150             var projectNameCell = LanguageTool.LanguageHelper.GetValue(language, "Code536");//项目名称
    151             var applicantCell = LanguageTool.LanguageHelper.GetValue(language, "Code537");//申办方
    152             var projectTitle = model.ProjectTitleModel;
    153             var cellDictionarys = new Dictionary<string, string>();
    154             if (projectTitle != null)
    155             {
    156                 cellDictionarys.Add(planNumCell, projectTitle.PlanNum);
    157                 cellDictionarys.Add(projectNameCell, projectTitle.ProjectName);
    158                 cellDictionarys.Add(applicantCell, projectTitle.Applicant);
    159             }
    160             for (int i = 0; i < 15; i++)
    161             {
    162                 model.DrugListStockModels.AddRange(model.DrugListStockModels);
    163             }
    164             #region 药物库存表
    165             if (model.DrugListStockModels.Count > maxCount)
    166             {
    167                 int sheetCount = 0;
    168                 for (int i = 0; i < model.DrugListStockModels.Count; i = i + maxCount)
    169                 {
    170                     if (i!=0)
    171                     {
    172                         cellDictionarys = null;
    173                     }
    174                     var thisHospitalListSheet = model.DrugListStockModels.Skip(sheetCount * maxCount).Take(maxCount).ToList();
    175                     if (i != 0)
    176                     {
    177                         maxCount = 1048575;
    178                         //加1048571(第一张sheet的数据数和其他表的不同)
    179                         thisHospitalListSheet = model.DrugListStockModels.Skip((sheetCount-1) * maxCount+ 1048571).Take(maxCount).ToList();
    180                     }
    181                     var dtHospitalSheet = ToDataTable(thisHospitalListSheet);
    182                     sheetCount = sheetCount + 1;
    183                     var excelNewModelSheet = new ExcelNewModel
    184                     {
    185                         CellDictionarys= cellDictionarys,
    186                         FieldDictionarys = dictionary,
    187                         ResultDataTable = dtHospitalSheet,
    188                         Title = "DrugListStock-" + sheetCount.ToString(),
    189                         SheetType = 2
    190                     };
    191                     excelModels.Add(excelNewModelSheet);
    192                 }
    193             }
    194             else
    195             {
    196                 var dt = ToDataTable(model.DrugListStockModels);
    197                 var excelNewModel = new ExcelNewModel
    198                 {
    199                     CellDictionarys = cellDictionarys,
    200                     FieldDictionarys = dictionary,
    201                     ResultDataTable = dt,
    202                     Title = "DrugListStock",
    203                     SheetType = 2
    204                 };
    205                 excelModels.Add(excelNewModel);
    206             }
    207             #endregion
    208 
    209 
    210 
    211             int maxCounts= 1048576-1;
    212             for (int i = 0; i < 10; i++)
    213             {
    214                 model.DrugListStockDetailModels.AddRange(model.DrugListStockDetailModels);
    215             }
    216             #region 药物清单
    217             if (model.DrugListStockDetailModels.Count > maxCounts)
    218             {
    219                 int sheetCount = 0;
    220                 for (int i = 0; i < model.DrugListStockDetailModels.Count; i = i + maxCounts)
    221                 {
    222                     var thisHospitalListSheet = model.DrugListStockDetailModels.Skip(sheetCount * maxCounts).Take(maxCounts).ToList();
    223                     var dtHospitalSheet = ToDataTable(thisHospitalListSheet);
    224                     dtHospitalSheet.Columns.Remove("DrugOrder");
    225                     sheetCount = sheetCount + 1;
    226                     var excelNewModelSheet = new ExcelNewModel
    227                     {
    228                         FieldDictionarys = dictionarys,
    229                         ResultDataTable = dtHospitalSheet,
    230                         Title = "DrugListStockDetail-" + sheetCount.ToString(),
    231                         SheetType = 1
    232                     };
    233                     excelModels.Add(excelNewModelSheet);
    234                 }
    235             }
    236             else
    237             {
    238                 var dt = ToDataTable(model.DrugListStockDetailModels);
    239                 dt.Columns.Remove("DrugOrder");
    240                 var excelNewModel = new ExcelNewModel
    241                 {
    242                     FieldDictionarys = dictionarys,
    243                     ResultDataTable = dt,
    244                     Title = "DrugListStockDetail",
    245                     SheetType = 1
    246                 };
    247                 excelModels.Add(excelNewModel);
    248             }
    249             #endregion
    250 
    251             string TableName = LanguageTool.LanguageHelper.GetValue(language, "Code567");
    252             string partUrl = NPOIHelper.GetDrugListStockBig(excelModels, "DrugListStock", serverPath);
    253             var baseModel = new ApiRes<ExportModelRespon>()
    254             {
    255                 Body = new ExportModelRespon(),
    256                 Message = "成功"
    257 
    258             };
    259             baseModel.Body.model = partUrl;
    260             string strJson = JsonConvert.SerializeObject(baseModel);
    261             fileInfoModel.IsSuccess = true;
    262             fileInfoModel.FilePath = partUrl;
    263             if (1 != _iSystemExportInfoServices.UpSystemExportInfo(fileInfoModel))
    264             {
    265                 throw new SeeException(5001, "", "");
    266             }
    267             Log4net.Error("药物库存表导出结束" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "" + strJson);
    268         }
    269         #endregion
    270         #region 中心药物明细导出1048576
    271 
    272 
    273         [HttpPost]
    274         public async Task<ApiRes<ExportModelRespon>> GetDrugUrl([FromBody]DrugExportRequest modelRequest)
    275         {
    276 
    277             #region 药物信息Old
    278             //List<string> rowName = new List<string>();
    279             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code497"));  //药物编号
    280             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code261")); //药物治疗类型
    281             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code262"));//批次
    282             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code496")); //有效期
    283             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code498")); //状态
    284             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code123"));//研究中心/仓库
    285             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code563")); //转运日期
    286             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code564")); //接收日期
    287             ////rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code566"));//物流单号
    288             //var valPatientNum = LanguageTool.LanguageHelper.GetValue(language, "Code127");
    289             //if (IsPatientScreenNoProject(projectInfoId))
    290             //{
    291             //    //受试者筛选号
    292             //    valPatientNum = LanguageTool.LanguageHelper.GetValue(language, "Code659");
    293             //}
    294             //rowName.Add(valPatientNum);//研究者
    295             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code462"));//随机号
    296             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code136")); //访视
    297             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code532"));//访视日期
    298             #endregion
    299             string serverPath = HttpContext.Current.Server.MapPath("/RandResult/");
    300             Task.Factory.StartNew(() => getDrugInfos(modelRequest, serverPath));
    301             var baseModel = new ApiRes<ExportModelRespon>()
    302             {
    303                 Body = new ExportModelRespon(),
    304                 Message = "成功"
    305             };
    306             baseModel.Body.model = "";
    307             return baseModel;
    308         }
    309 
    310         private async void getDrugInfos(DrugExportRequest modelRequest, string serverPath)
    311         {
    312             Log4net.Error("中心药物明细导出开始" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
    313 
    314             var fileInfoModel = _iSystemExportInfoServices.GetSystemExportInfoModel(projectInfoId, userId, (int)ReportTypeEnum.DrugInfoReport);
    315             if (fileInfoModel != null)
    316             {
    317                 fileInfoModel.IsSuccess = false;
    318                 if (1 != _iSystemExportInfoServices.UpSystemExportInfo(fileInfoModel))
    319                 {
    320                     throw new SeeException(5001, "", "");
    321                 }
    322             }
    323             else
    324             {
    325                 fileInfoModel = new TM_SystemExportInfo()
    326                 {
    327                     Id = Guid.NewGuid().ToString(),
    328                     CompanyId = companyId,
    329                     ProjectId = projectId,
    330                     ProjectInfoId = projectInfoId,
    331                     FilePath = "",
    332                     IsSuccess = false,
    333                     ReportType = (int)ReportTypeEnum.DrugInfoReport,
    334                     UserId = userId,
    335                     CreateTime = DateTime.Now,
    336                 };
    337                 if (1 != _iSystemExportInfoServices.AddSystemExportInfo(fileInfoModel))
    338                 {
    339                     throw new SeeException(5001, "", "");
    340                 }
    341             }
    342 
    343             List<DrugAllModel> models = _iDrugServices.GetModelListByAllExport(modelRequest.HospitalId,
    344                modelRequest.DrugType, modelRequest.DrugBatch, modelRequest.Status, modelRequest.DrugNumList, userId, projectInfoId);
    345             string language = modelRequest.Language;
    346             if (!_iUserGroupServices.IsBlindStatus(userId, projectInfoId))
    347             {
    348                 foreach (var item in models)
    349                 {
    350                     item.DrugType = LanguageTool.LanguageHelper.GetValue(language, "Code129"); // "不适用"
    351                     item.DrugBatchNumber = LanguageTool.LanguageHelper.GetValue(language, "Code129"); // "不适用"
    352                     item.ExpiyDateTime = LanguageTool.LanguageHelper.GetValue(language, "Code129");// "不适用"
    353                 }
    354             }
    355             List<DrugAllExportModel> list = new List<DrugAllExportModel>();
    356             foreach (var model in models)
    357             {
    358                 DrugAllExportModel m = new DrugAllExportModel()
    359                 {
    360                     DrugNum = model.DrugNum,
    361                     DrugType = model.DrugType,
    362                     DrugBatchNumber = model.DrugBatchNumber,
    363                     ExpiyDateTime = model.ExpiyDateTime,
    364                     Status = LanguageTool.LanguageHelper.GetEnglishValueByFiledName(language, model.Status),
    365                     HospitalName = model.HospitalName,
    366                     TransportDate = model.TransportDate,
    367                     ReceivedDate = model.ReceivedDate,
    368                     Researcher = model.PatNum,
    369                     RandomNum = model.RandomNum,
    370                     ViewName = model.ViewName,
    371                     SendDrugTime = model.SendDrugTime
    372                 };
    373                 list.Add(m);
    374             }
    375             //DataTable dt = ToDataTable<DrugAllExportModel>(list);
    376 
    377             string drugNo= LanguageTool.LanguageHelper.GetValue(language, "Code497");  //药物编号1
    378             string drugType= LanguageTool.LanguageHelper.GetValue(language, "Code261"); //药物治疗类型2
    379             string lot= LanguageTool.LanguageHelper.GetValue(language, "Code262");//批次3
    380             string expiryData= LanguageTool.LanguageHelper.GetValue(language, "Code496"); //有效期4
    381             string status= LanguageTool.LanguageHelper.GetValue(language, "Code498"); //状态5
    382             string hospitalName = LanguageTool.LanguageHelper.GetValue(language, "Code123");//研究中心/仓库6
    383             string deliveryDate= LanguageTool.LanguageHelper.GetValue(language, "Code563"); //转运日期7
    384             string receivingDate= LanguageTool.LanguageHelper.GetValue(language, "Code564"); //接收日期8
    385             //rowName.Add(LanguageTool.LanguageHelper.GetValue(language, "Code566"));//物流单号
    386             string valPatientNum = LanguageTool.LanguageHelper.GetValue(language, "Code127");//9
    387             if (IsPatientScreenNoProject(projectInfoId))
    388             {
    389                 //受试者筛选号
    390                 valPatientNum = LanguageTool.LanguageHelper.GetValue(language, "Code659");
    391             }
    392             string randomNum= LanguageTool.LanguageHelper.GetValue(language, "Code462");//随机号10
    393             string visit= LanguageTool.LanguageHelper.GetValue(language, "Code136"); //访视11
    394             string dispensationTime= LanguageTool.LanguageHelper.GetValue(language, "Code532");//访视日期12
    395             Dictionary<string, string> dictionary = new Dictionary<string, string>()
    396             {
    397                 { drugNo,"DrugNum"},
    398                 { drugType,"DrugType"},
    399                 { lot,"DrugBatchNumber"},
    400                 { expiryData,"ExpiyDateTime"},
    401                 { status,"Status"},
    402                 { hospitalName,"HospitalName"},
    403                 { deliveryDate,"TransportDate"},
    404                 { receivingDate,"ReceivedDate"},
    405                 { valPatientNum,"Researcher"},
    406                 { randomNum,"RandomNum"},
    407                 { visit,"ViewName"},
    408                 { dispensationTime,"SendDrugTime"}
    409             };
    410             List<ExcelNewModel> excelModels = new List<ExcelNewModel>();
    411             int maxCount = 1048576 - 5; //1048576是EXCEL2007的最大行数,-5是要去掉标题行
    412             for (int i = 0; i < 13; i++)
    413             {
    414                 list.AddRange(list);
    415             }
    416             if (list.Count > maxCount)
    417             {
    418                 int sheetCount = 0;
    419                 for (int i = 0; i < list.Count; i = i + maxCount)
    420                 {
    421                     var thisHospitalListSheet = list.Skip(sheetCount * maxCount).Take(maxCount).ToList();
    422                     if (i!=0)
    423                     {
    424                         maxCount = 1048575;
    425                         //加1048571(第一张sheet的数据数和其他表的不同)
    426                         thisHospitalListSheet = list.Skip((sheetCount - 1) * maxCount+ 1048571).Take(maxCount).ToList();
    427                     }  
    428                     var dtHospitalSheet = ToDataTable(thisHospitalListSheet);
    429                     sheetCount = sheetCount + 1;
    430                     var excelNewModelSheet = new ExcelNewModel
    431                     {
    432                         FieldDictionarys = dictionary,
    433                         ResultDataTable = dtHospitalSheet,
    434                         Title = "DrugInfo-" + sheetCount.ToString(),
    435                     };
    436                     excelModels.Add(excelNewModelSheet);
    437                 }
    438             }
    439             else
    440             {
    441                 var dt = ToDataTable(list);
    442                 var excelNewModel = new ExcelNewModel
    443                 {
    444                     FieldDictionarys = dictionary,
    445                     ResultDataTable = dt,
    446                     Title = "DrugInfo"
    447                 };
    448                 excelModels.Add(excelNewModel);
    449             }
    450             string TableName = LanguageTool.LanguageHelper.GetValue(language, "Code567");
    451             #region 获取项目信息
    452             var ProjectMainModels = new TMProjectModel();
    453             if (string.IsNullOrEmpty(companyToken))
    454             {
    455                 TM_Project project = _iProjectServices.GetByTopOne();
    456                 ProjectMainModels = _iProjectServices.GetProjectById(project == null ? "" : project.ProjectId);
    457                 Log4net.Error("company:None");
    458             }
    459             else
    460             {
    461                 ProjectMainModels = _iProjectServices.GetProjectById(projectId);
    462             }
    463             #endregion 
    464 
    465             //string partUrl = NPOIHelper.getUrlForDrugDetail(dt, rowName, TableName, ProjectMainModels.ProjectName, LanguageTool.LanguageHelper.GetValue(language, "Code536"), LanguageTool.LanguageHelper.GetValue(language, "Code568"));
    466             string partUrl = NPOIHelper.GetDrugInfoUrlBig(excelModels, TableName, serverPath, ProjectMainModels.ProjectName, LanguageTool.LanguageHelper.GetValue(language, "Code536"), LanguageTool.LanguageHelper.GetValue(language, "Code568"));
    467             var baseModel = new ApiRes<ExportModelRespon>()
    468             {
    469                 Body = new ExportModelRespon(),
    470                 Message = "成功"
    471 
    472             };
    473             baseModel.Body.model = partUrl;
    474             string strJson = JsonConvert.SerializeObject(baseModel);
    475             fileInfoModel.IsSuccess = true;
    476             fileInfoModel.FilePath = partUrl;
    477             if (1 != _iSystemExportInfoServices.UpSystemExportInfo(fileInfoModel))
    478             {
    479                 throw new SeeException(5001, "", "");
    480             }
    481             Log4net.Error("中心药物明细导出结束" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "" + strJson);
    482         }
    483         #endregion
    View Code

    4、

    using NPOI.HSSF.UserModel;
    using NPOI.SS.UserModel;
    using NPOI.XSSF.UserModel;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Dynamic;
    using System.IO;
    using System.Linq;
    using System.Runtime.CompilerServices;
    using System.Text;
    using System.Web;
    using NPOI.HSSF.Util;
    using NPOI.SS.Util;
    using TM.Medical.ToolUtility.Tools;
    using NPOI.XSSF.Streaming;
    
    namespace UtilityNPOI
    {
        public class NPOIHelper
        {
            private HSSFWorkbook hssfworkbook;
            private ISheet sheet1;
    
            public void BuildExcel()
            {
                hssfworkbook = new HSSFWorkbook();
                // 新建一个Excel页签
                sheet1 = hssfworkbook.CreateSheet("Sheet1");
    
                // 创建新增行
                for (var i = 0; i < 10; i++)
                {
                    IRow row1 = sheet1.CreateRow(i);
                    for (var j = 0; j < 10; j++)
                    {
                        //新建单元格
                        ICell cell = row1.CreateCell(j);
                        // 单元格赋值
                        cell.SetCellValue(string.Format("{0}{1}", "单元格", j.ToString()));
                    }
                }
                // 设置行宽度
                sheet1.SetColumnWidth(2, 10*256);
                // 获取单元格 并设置样式
                ICellStyle styleCell = hssfworkbook.CreateCellStyle();
                //居中
                styleCell.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                //垂直居中
                styleCell.VerticalAlignment = VerticalAlignment.Top;
                ICellStyle cellStyle = hssfworkbook.CreateCellStyle();
                //设置字体
                IFont fontColorRed = hssfworkbook.CreateFont();
                fontColorRed.Color = HSSFColor.OliveGreen.Red.Index;
                styleCell.SetFont(fontColorRed);
                sheet1.GetRow(2).GetCell(2).CellStyle = styleCell;
                // 合并单元格
                sheet1.AddMergedRegion(new CellRangeAddress(2, 4, 2, 5));
                // 输出Excel
                string filename = "patient" + DateTime.Now.ToString("yy-MM-dd hh:mm:ss") + ".xls";
                var context = HttpContext.Current;
                context.Response.ContentType = "application/vnd.ms-excel";
                context.Response.AddHeader("Content-Disposition",
                    string.Format("attachment;filename={0}", context.Server.UrlEncode(filename)));
                context.Response.Clear();
    
                MemoryStream file = new MemoryStream();
                hssfworkbook.Write(file);
                context.Response.BinaryWrite(file.GetBuffer());
                context.Response.End();
            }
    
            public static string getUrl(DataTable dtsource, List<string> rowName,string fileName)
            {
                NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
                NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("block");
                ICellStyle dateStyle = workbook.CreateCellStyle();
                IDataFormat format = workbook.CreateDataFormat();
    
                int rowCount = dtsource.Rows.Count + 1;
                int cellCount = dtsource.Columns.Count;
                Create(sheet, rowCount, cellCount);
    
                //for (int i = 0; i < dtsource.Columns.Count; i++)
                //{
                //    string cellValue = dtsource.Columns[i].ColumnName.ToString();
                //    sheet.GetRow(0).GetCell(i).SetCellValue(cellValue);
                //}
                for (int i = 0; i < rowName.Count; i++)
                {
                    string cellValue = rowName[i].ToString();
                    sheet.GetRow(0).GetCell(i).SetCellValue(cellValue);
                }
    
                for (int i = 0; i < dtsource.Rows.Count; i++)
                {
                    int row = i + 1;
                    for (int j = 0; j < dtsource.Columns.Count; j++)
                    {
                        string cellValue = dtsource.Rows[i][j].ToString();
                        sheet.GetRow(row).GetCell(j).SetCellValue(cellValue);
                    }
                }
               
                string filepath = "/export/";
                var patUrl = HttpContext.Current.Server.MapPath("/RandResult/");
                if (!FileHelperTools.IsExistDirectory(patUrl))
                {
                    FileHelperTools.CreateDirectory(patUrl);
                }
                var partName = UniqueKeyGenerator.GetDtRng_RandomNo();
                using (FileStream fs = File.OpenWrite(@""+patUrl+fileName+"-"+ partName + ".xls"))
                    //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!
                {
                    workbook.Write(fs); //向打开的这个xls文件中写入mySheet表并保存。
                }
    
                return "/RandResult/"+fileName+"-"+partName + ".xls";
            }
            public static string getUrl(DataTable dtsource, List<string> rowName, string fileName, List<string> relations,
                List<string> relationNames)
            {
                NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
                NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("block");
                ICellStyle dateStyle = workbook.CreateCellStyle();
                IDataFormat format = workbook.CreateDataFormat();
    
                int rowCount = dtsource.Rows.Count + 6;
                int cellCount = dtsource.Columns.Count;
                Create(sheet, rowCount, cellCount);
    
                for (int i = 0; i < relationNames.Count(); i++)
                {
                    int row = i;
                    sheet.GetRow(row).GetCell(0).SetCellValue(relationNames[i].ToString());
                }
                for (int i = 0; i < relations.Count(); i++)
                {
                    int row = i;
                    sheet.GetRow(row).GetCell(1).SetCellValue(relations[i].ToString());
                }
    
                for (int i = 0; i < rowName.Count; i++)
                {
                    string cellValue = rowName[i].ToString();
                    sheet.GetRow(5).GetCell(i).SetCellValue(cellValue);
                }
    
                for (int i = 0; i < dtsource.Rows.Count; i++)
                {
                    int row = i + 6;
                    for (int j = 0; j < dtsource.Columns.Count; j++)
                    {
                        string cellValue = dtsource.Rows[i][j].ToString();
                        sheet.GetRow(row).GetCell(j).SetCellValue(cellValue);
                    }
                }
    
                string filepath = "/export/";
                var patUrl = HttpContext.Current.Server.MapPath("/RandResult/");
                if (!FileHelperTools.IsExistDirectory(patUrl))
                {
                    FileHelperTools.CreateDirectory(patUrl);
                }
                var partName = UniqueKeyGenerator.GetDtRng_RandomNo();
                using (FileStream fs = File.OpenWrite(@"" + patUrl + fileName + "-" + partName + ".xls"))
                //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!
                {
                    workbook.Write(fs); //向打开的这个xls文件中写入mySheet表并保存。
                }
    
                return "/RandResult/" + fileName + "-" + partName + ".xls";
            }
    
            public static string GetUrl(List<ExcelModel> excelModels, string fileName)
            {
                NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
                foreach (var excelModel in excelModels)
                {
                    var dtSource = excelModel.ResultDataTable;
                    var cellNames = excelModel.CellNames;
                    var cellDictionarys = excelModel.CellDictionarys;
                    var title = excelModel.Title;
                    NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(title);
                    ICellStyle dateStyle = workbook.CreateCellStyle();
                    IDataFormat format = workbook.CreateDataFormat();
                    int icount = 1;
                    if (cellDictionarys.Count > 0)
                    {
                        icount = 3;
                    }
                    int rowCount = dtSource.Rows.Count+ cellDictionarys.Count + icount;
                    int cellCount = dtSource.Columns.Count;
                    Create(sheet, rowCount, cellCount);
                    int index = 0;
                    foreach (var cellDictionary in cellDictionarys)
                    {
                        var key = cellDictionary.Key;
                        var value = cellDictionary.Value;
                        sheet.GetRow(index).GetCell(0).SetCellValue(key);
                        sheet.GetRow(index).GetCell(1).SetCellValue(value);
                        index++;
                    }
                    if (cellDictionarys.Count > 0)
                    {
                        index += 2;
                    }
    
                    for (int i = 0; i < cellNames.Count; i++)
                    {
                        string cellValue = cellNames[i].ToString();
                        sheet.GetRow(index).GetCell(i).SetCellValue(cellValue);
                    }
    
                    for (int i = 0; i < dtSource.Rows.Count; i++)
                    {
                        int row = index + i + 1;
                        for (int j = 0; j < dtSource.Columns.Count; j++)
                        {
                            string cellValue = dtSource.Rows[i][j].ToString();
                            sheet.GetRow(row).GetCell(j).SetCellValue(cellValue);
                        }
                    }
    
                }
                var patUrl = HttpContext.Current.Server.MapPath("/RandResult/");
                if (!FileHelperTools.IsExistDirectory(patUrl))
                {
                    FileHelperTools.CreateDirectory(patUrl);
                }
                var partName = UniqueKeyGenerator.GetDtRng_RandomNo();
                using (FileStream fs = File.OpenWrite(@"" + patUrl + fileName + "-" + partName + ".xls"))
                {
                    workbook.Write(fs); //向打开的这个xls文件中写入mySheet表并保存。
                    workbook.Close();
                }
    
                return "/RandResult/" + fileName + "-" + partName + ".xls";
            }
            public static string GetUrl(List<ExcelNewModel> excelModels, string fileName)
            {
                NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
                foreach (var excelModel in excelModels)
                {
                    var dtSource = excelModel.ResultDataTable;
                    var fieldDictionarys = excelModel.FieldDictionarys;
                    var title = excelModel.Title;
                    NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(title);
                    ICellStyle dateStyle = workbook.CreateCellStyle();
                    IDataFormat format = workbook.CreateDataFormat();
                    int rowCount = dtSource.Rows.Count + 1;
                    int cellCount = fieldDictionarys.Count;
                    Create(sheet, rowCount, cellCount);
                    int index = 0;
                    int k = 0;
                    foreach (var fieldDictionary in fieldDictionarys)
                    {
                        string cellValue = fieldDictionary.Key;
                        sheet.GetRow(index).GetCell(k).SetCellValue(cellValue);
                        k++;
                    }
    
                    for (int i = 0; i < dtSource.Rows.Count; i++)
                    {
                        int row = index + i+1;
                        int j = 0;
                        foreach (var fieldDictionary in fieldDictionarys)
                        {
                            string fieldName = fieldDictionary.Value;
                            string cellValue = dtSource.Rows[i][fieldName].ToString();
                            sheet.GetRow(row).GetCell(j).SetCellValue(cellValue);
                            j++;
                        }
                    }
    
                }
                var patUrl = HttpContext.Current.Server.MapPath("/RandResult/");
                if (!FileHelperTools.IsExistDirectory(patUrl))
                {
                    FileHelperTools.CreateDirectory(patUrl);
                }
                var partName = UniqueKeyGenerator.GetDtRng_RandomNo();
                using (FileStream fs = File.OpenWrite(@"" + patUrl + fileName + "-" + partName + ".xls"))
                {
                    workbook.Write(fs); //向打开的这个xls文件中写入mySheet表并保存。
                    workbook.Close();
                }
    
                return "/RandResult/" + fileName + "-" + partName + ".xls";
            }
    
    
            public static string getUrlNew(DataTable dtsource, List<string> rowName, string fileName, List<string> relations,
                List<string> relationNames,string title, DataTable dtsource2, List<string> rowName2,string title2)
            {
                NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
                NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet(title);
                ICellStyle dateStyle = workbook.CreateCellStyle();
                IDataFormat format = workbook.CreateDataFormat();
    
                int rowCount = dtsource.Rows.Count + 6;
                int cellCount = dtsource.Columns.Count;
                Create(sheet, rowCount, cellCount);
                //sheet.GetRow(0).GetCell(dtsource.Columns.Count/2).SetCellValue(title);
                for (int i = 0; i < relationNames.Count(); i++)
                {
                    int row = i;
                    sheet.GetRow(row).GetCell(0).SetCellValue(relationNames[i].ToString());
                }
                for (int i = 0; i < relations.Count(); i++)
                {
                    int row = i;
                    sheet.GetRow(row).GetCell(1).SetCellValue(relations[i].ToString());
                }
                for (int i = 0; i < rowName.Count; i++)
                {
                    string cellValue = rowName[i].ToString();
                    sheet.GetRow(5).GetCell(i).SetCellValue(cellValue);
                }
    
                for (int i = 0; i < dtsource.Rows.Count; i++)
                {
                    int row = i + 6;
                    for (int j = 0; j < dtsource.Columns.Count; j++)
                    {
                        string cellValue = dtsource.Rows[i][j].ToString();
                        sheet.GetRow(row).GetCell(j).SetCellValue(cellValue);
                    }
                }
                int rowCount2 = dtsource2.Rows.Count+1;
                int cellCount2 = dtsource2.Columns.Count;
                NPOI.SS.UserModel.ISheet sheet2 = workbook.CreateSheet(title2);
                Create(sheet2, rowCount2, cellCount2);
                for (int i = 0; i < rowName2.Count; i++)
                {
                    string cellValue = rowName2[i].ToString();
                    sheet2.GetRow(0).GetCell(i).SetCellValue(cellValue);
                }
    
                for (int i = 0; i < dtsource2.Rows.Count; i++)
                {
                    int row = i + 1;
                    for (int j = 0; j < dtsource2.Columns.Count; j++)
                    {
                        string cellValue = dtsource2.Rows[i][j].ToString();
                        sheet2.GetRow(row).GetCell(j).SetCellValue(cellValue);
                    }
                }
    
                string filepath = "/export/";
                var patUrl = HttpContext.Current.Server.MapPath("/RandResult/");
                var partName = UniqueKeyGenerator.GetDtRng_RandomNo();
                using (FileStream fs = File.OpenWrite(@"" + patUrl + fileName + "-" + partName + ".xls"))
                //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!
                {
                    workbook.Write(fs); //向打开的这个xls文件中写入mySheet表并保存。
                }
    
                return "/RandResult/" + fileName + "-" + partName + ".xls";
            }
            /// <summary>
            /// 创建单元格
            /// </summary>
            /// <param name="sheet"></param>
            /// <param name="rowcount">行数</param>
            /// <param name="cellcount">列数</param>
            /// <returns>返回表</returns>
            public static ISheet Create(ISheet sheet, int rowcount, int cellcount)
            {
                for (int i = 0; i < rowcount; i++)
                {
                    NPOI.SS.UserModel.IRow targetRow = null;
                    targetRow = sheet.CreateRow(i);
                    for (int j = 0; j < cellcount; j++)
                    {
                        NPOI.SS.UserModel.IRow row = sheet.GetRow(i);
                        NPOI.SS.UserModel.ICell cell = row.CreateCell(j);
                    }
                }
                return sheet;
            }
    
            public static MemoryStream CommonBaseExcel(DataTable dtsource)
            {
                NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
                NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("test_01");
                ICellStyle dateStyle = workbook.CreateCellStyle();
                IDataFormat format = workbook.CreateDataFormat();
    
                int rowCount = dtsource.Rows.Count + 1;
                int cellCount = dtsource.Columns.Count;
                Create(sheet, rowCount, cellCount);
    
                for (int i = 0; i < dtsource.Columns.Count; i++)
                {
                    string cellValue = dtsource.Columns[i].ColumnName.ToString();
                    sheet.GetRow(0).GetCell(i).SetCellValue(cellValue);
                }
                for (int i = 0; i < dtsource.Rows.Count; i++)
                {
                    int row = i + 1;
                    for (int j = 0; j < dtsource.Columns.Count; j++)
                    {
                        string cellValue = dtsource.Rows[i][j].ToString();
                        sheet.GetRow(row).GetCell(j).SetCellValue(cellValue);
                    }
    
                }
                using (MemoryStream ms = new MemoryStream())
                {
                    workbook.Write(ms);
                    ms.Flush();
                    ms.Position = 0;
    
                    workbook = null;
                    //workbook.Dispose();//一般只用写这一个就OK了,他会遍历并释放所有资源,但当前版本有问题所以只释放sheet
                    return ms;
                }
            }
    
            public static DataSet GetImportExcel(string filePath)
            {
                string fileExt = Path.GetExtension(filePath);
                IWorkbook workbook;
    
                #region 初始化信息(兼容Excel2003、Excel2007)
    
                using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    if (fileExt == ".xls")
                    {
                        workbook = new HSSFWorkbook(file);
                    }
                    else if (fileExt == ".xlsx")
                    {
                        workbook = new NPOI.XSSF.UserModel.XSSFWorkbook(file);
                    }
                    else
                    {
                        return null;
                    }
                }
    
                #endregion
    
                DataSet ds = new DataSet();
    
    
                int sheetLenth = workbook.NumberOfSheets;
    
                for (int m = 0; m < sheetLenth; m++)
                {
                    ISheet sheet = workbook.GetSheetAt(m);
                    string tableName = workbook.GetSheetName(m);
                    int colCount = 0; //最大列数
    
                    for (int i = 0; i < sheet.PhysicalNumberOfRows; i++)
                    {
                        var rowObj = sheet.GetRow(i);
                        if (rowObj != null)
                            if (rowObj.LastCellNum > colCount)
                                colCount = rowObj.LastCellNum;
                    }
    
                    #region 将数据加载到内容表里
    
                    System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
                    DataTable dt = new DataTable();
                    int index = 0;
                    while (rows.MoveNext())
                    {
                        IRow row;
                        if (fileExt == ".xls") //兼容Excel2003
                        {
                            row = (HSSFRow) rows.Current;
                        }
                        else if (fileExt == ".xlsx") //兼容Excel2007
                        {
                            row = (NPOI.XSSF.UserModel.XSSFRow) rows.Current;
                        }
                        else
                        {
                            row = null;
                        }
                        if (row != null)
                        {
                            index++;
                            if (index.Equals(1))
                            {
                                for (int j = 0; j < colCount; j++)
                                {
                                    dt.Columns.Add(Convert.ToChar(((int) 'A') + j).ToString());
                                }
                            }
    
                        }
    
                        DataRow dr = dt.NewRow();
    
                        for (int i = 0; i < row.LastCellNum; i++)
                        {
                            ICell cell = row.GetCell(i);
    
    
                            if (cell == null)
                            {
                                dr[i] = null;
                            }
                            else
                            {
                                dr[i] = cell.ToString().Trim();
                            }
                        }
                        dt.Rows.Add(dr);
                    }
                    dt.TableName = tableName;
                    ds.Tables.Add(dt);
    
                    #endregion
                }
                return ds;
            } 
            public static DataSet GetImportExcelNew(Stream fs, string fileExt)
            {
    
                IWorkbook workbook;
    
                #region 初始化信息(兼容Excel2003、Excel2007)
    
                if (fileExt == ".xls")
                {
                    workbook = new HSSFWorkbook(fs);
                }
                else if (fileExt == ".xlsx")
                {
                    workbook = new XSSFWorkbook(fs);
                }
                else
                {
                    return null;
                }
    
                #endregion
    
                DataSet ds = new DataSet();
    
    
                int sheetLenth = workbook.NumberOfSheets;
    
                for (int m = 0; m < sheetLenth; m++)
                {
                    ISheet sheet = workbook.GetSheetAt(m);
                    string tableName = workbook.GetSheetName(m);
                    int colCount = 0; //最大列数
    
                    for (int i = 0; i < sheet.PhysicalNumberOfRows; i++)
                    {
                        var rowObj = sheet.GetRow(i);
                        if (rowObj != null)
                            if (rowObj.LastCellNum > colCount)
                                colCount = rowObj.LastCellNum;
                    }
    
                    #region 将数据加载到内容表里
    
                    System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
                    DataTable dt = new DataTable();
                    int index = 0;
                    while (rows.MoveNext())
                    {
                        IRow row;
                        if (fileExt == ".xls") //兼容Excel2003
                        {
                            row = (HSSFRow) rows.Current;
                        }
                        else if (fileExt == ".xlsx") //兼容Excel2007
                        {
                            row = (NPOI.XSSF.UserModel.XSSFRow) rows.Current;
                        }
                        else
                        {
                            row = null;
                        }
                        if (row != null)
                        {
                            index++;
                            if (index.Equals(1))
                            {
                                for (int j = 0; j < colCount; j++)
                                {
                                    dt.Columns.Add(Convert.ToChar(((int) 'A') + j).ToString());
                                }
                            }
    
                        }
    
                        DataRow dr = dt.NewRow();
    
                        for (int i = 0; i < row.LastCellNum; i++)
                        {
                            ICell cell = row.GetCell(i);
    
    
                            if (cell == null)
                            {
                                dr[i] = null;
                            }
                            else
                            {
                                dr[i] = cell.ToString().Trim();
                            }
                        }
                        dt.Rows.Add(dr);
                    }
                    dt.TableName = tableName;
                    ds.Tables.Add(dt);
    
                    #endregion
                }
                return ds;
            } 
            public static DataTable ReadHead(string path)
            {
                var patUrl2 = HttpContext.Current.Server.MapPath("");
                var patUrl = HttpContext.Current.Server.MapPath("/");
                var patUrl3 = HttpContext.Current.Server.MapPath("/upload/");
                string fileName =patUrl+path;  //路径
                FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate); //读取文件流
                HSSFWorkbook workbook = new HSSFWorkbook(fs);  //根据EXCEL文件流初始化工作簿
                var sheet1 = workbook.GetSheetAt(0); //获取第一个sheet
                DataTable table = new DataTable();//
                var row1 = sheet1.GetRow(0);//获取第一行即标头
                int cellCount = row1.LastCellNum; //第一行的列数
                //把第一行的数据添加到datatable的列名
                for (int i = row1.FirstCellNum; i < cellCount; i++)
                {
                    DataColumn column = new DataColumn(row1.GetCell(i).StringCellValue);
                    if(!string.IsNullOrEmpty(row1.GetCell(i).StringCellValue))
                    table.Columns.Add(column);
                }
                workbook = null; //清空工作簿--释放资源
                sheet1 = null;  //清空sheet</pre><br>
                return table;
            } 
            public static DataTable ReadExcelAll(string path)
            {
                //string fileName = @"e:myxls.xls";  //路径
                var patUrl = HttpContext.Current.Server.MapPath("/");
                string fileName = patUrl + path;
                FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate); //读取文件流
                HSSFWorkbook workbook = new HSSFWorkbook(fs);  //根据EXCEL文件流初始化工作簿
                var sheet1 = workbook.GetSheetAt(0); //获取第一个sheet
                DataTable table = new DataTable();//
                var row1 = sheet1.GetRow(0);//获取第一行即标头
                int cellCount = row1.LastCellNum; //第一行的列数
                //把第一行的数据添加到datatable的列名
                for (int i = row1.FirstCellNum; i < cellCount; i++)
                {
                    DataColumn column = new DataColumn(row1.GetCell(i).StringCellValue);
                    table.Columns.Add(column);
                }
                int rowCount = sheet1.LastRowNum; //总行数
                //把每行数据添加到datatable中
                for (int i = (sheet1.FirstRowNum + 1); i <= sheet1.LastRowNum; i++)
                {
                    HSSFRow row = (HSSFRow)sheet1.GetRow(i);
                    
                    if (row.GetCell(0) != null)
                    { 
                        DataRow dataRow = table.NewRow();
                        for (int j = row.FirstCellNum; j < cellCount; j++)
                        {
                            ICell cell = row.GetCell(j);
                            if (cell == null)
                            {
                                dataRow[j] = null;
                            }
                            else
                            {
                                if (cell.CellType == CellType.Numeric && DateUtil.IsCellDateFormatted(cell))
                                {
                                    //cell.SetCellType(CellType.String);
                                    //int sums = cell.ToString().Length;
                                    if (cell.ToString().Length>7)
                                    {
                                        dataRow[j] = cell.DateCellValue.ToString("yyyy/MM/dd");
                                    }
                                    else
                                    {
                                        dataRow[j] = cell.DateCellValue.ToString("yyyy/MM");
                                    }
                                    
                                }
                                else
                                {
                                    dataRow[j] = cell.ToString().Trim();
                                }
                            }
                            //if (row.GetCell(j) != null)
                            //    dataRow[j] = row.GetCell(j).ToString();
                        }
    
                        if (!string.IsNullOrEmpty(row.GetCell(0).ToString()))
                            table.Rows.Add(dataRow);
                    }
                }
                //到这里 table 已经可以用来做数据源使用了
                workbook = null; //清空工作簿--释放资源
                sheet1 = null;  //清空sheet</pre><br>
                return table;
            }
    
            public static string getUrlForDrugDetail(DataTable dtsource, List<string> rowName, string fileName, string projectName,string projectTitle,string generatedTime )
            {
                NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
                NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("block");
                ICellStyle dateStyle = workbook.CreateCellStyle();
                IDataFormat format = workbook.CreateDataFormat();
    
                int rowCount = dtsource.Rows.Count + 1 + 4;
                int cellCount = dtsource.Columns.Count;
    
                //设置样式  居中 字体
                ICellStyle style0 = workbook.CreateCellStyle();
                style0.VerticalAlignment = VerticalAlignment.Center;
                style0.Alignment = HorizontalAlignment.Center;
                IFont font1 = workbook.CreateFont();
                font1.FontHeight = 15 * 15;
                font1.IsBold = true;
                style0.SetFont(font1);
    
                ICellStyle style = workbook.CreateCellStyle();
                style.VerticalAlignment = VerticalAlignment.Center;
                style.Alignment = HorizontalAlignment.Center;
                IFont font = workbook.CreateFont();
                style.SetFont(font);
    
                ICellStyle style2 = workbook.CreateCellStyle();
                IFont font2 = workbook.CreateFont();
                font2.FontHeight = 15 * 15;
                font1.IsBold = true;
                style2.SetFont(font2);
    
                Create(sheet, rowCount, cellCount);
                //建创行
                ICell cell0 = sheet.GetRow(0).GetCell(0);
                cell0.SetCellValue(fileName); //药物明细表
                sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, cellCount));
                cell0.CellStyle = style0;
    
                ICell cell1 = sheet.GetRow(1).GetCell(0);
                cell1.SetCellValue(projectTitle + "" + projectName);//项目名称
                sheet.AddMergedRegion(new CellRangeAddress(1, 1, 0, cellCount));
                cell1.CellStyle = style2;
    
                ICell cell2 = sheet.GetRow(2).GetCell(0);
                cell2.SetCellValue(generatedTime+"" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));//生成时间
                sheet.AddMergedRegion(new CellRangeAddress(2, 2, 0, cellCount));
                cell2.CellStyle = style2;
    
                ICell cell3 = sheet.GetRow(3).GetCell(0);
                cell3.SetCellValue("");
                sheet.AddMergedRegion(new CellRangeAddress(3, 3, 0, cellCount));
    
                for (int i = 0; i < rowName.Count; i++)
                {
                    string cellValue = rowName[i].ToString();
                    ICell cell = sheet.GetRow(4).GetCell(i);
                    cell.SetCellValue(cellValue);
                    cell.CellStyle = style0;
                }
    
                for (int i = 0; i < dtsource.Rows.Count; i++)
                {
                    int row = i + 1 + 4;
                    for (int j = 0; j < dtsource.Columns.Count; j++)
                    {
                        string cellValue = dtsource.Rows[i][j].ToString();
                        ICell cell = sheet.GetRow(row).GetCell(j);
                        cell.SetCellValue(cellValue);
                        cell.CellStyle = style;
                    }
                }
                string filepath = "/export/";
                if (Directory.Exists(HttpContext.Current.Server.MapPath("/RandResult/")) == false)//如果不存在就创建file文件夹
                {
                    Directory.CreateDirectory(HttpContext.Current.Server.MapPath("/RandResult/"));
                }
                var patUrl = HttpContext.Current.Server.MapPath("/RandResult/");
                var partName = UniqueKeyGenerator.GetDtRng_RandomNo();
                using (FileStream fs = File.OpenWrite(@"" + patUrl + fileName + "-" + partName + ".xls"))
                //打开一个xls文件,如果没有则自行创建,如果存在myxls.xls文件则在创建是不要打开该文件!
                {
                    workbook.Write(fs); //向打开的这个xls文件中写入mySheet表并保存。
                }
    
                return "/RandResult/" + fileName + "-" + partName + ".xls";
            }
    
    
            /// <summary>
            /// 导出中心药物明细
            /// </summary>
            /// <param name="excelModels"></param>
            /// <param name="fileName"></param>
            /// <param name="serverPath"></param>
            /// <returns></returns>
            public static string GetDrugInfoUrlBig(List<ExcelNewModel> excelModels, string fileName, string serverPath,string projectName, string projectTitle, string generatedTime)
            {
                SXSSFWorkbook sxssfBook = new SXSSFWorkbook();
                sxssfBook.RandomAccessWindowSize = 1000;
                int sheetIndex = 0;
                foreach (var excelModel in excelModels)
                {
                    var dtSource = excelModel.ResultDataTable;
                    var fieldDictionarys = excelModel.FieldDictionarys;
                    var title = excelModel.Title;
                    NPOI.SS.UserModel.ISheet sheet = sxssfBook.CreateSheet(title);
                    ICellStyle dateStyle = sxssfBook.CreateCellStyle();
                    IDataFormat format = sxssfBook.CreateDataFormat();
    
                    if (sheetIndex==0)
                    {
                        int rowCounts = dtSource.Rows.Count + 1 + 4;
                        int cellCounts = dtSource.Columns.Count;
    
                        //设置样式  居中 字体
                        ICellStyle style0 = sxssfBook.CreateCellStyle();
                        style0.VerticalAlignment = VerticalAlignment.Center;
                        style0.Alignment = HorizontalAlignment.Center;
                        IFont font1 = sxssfBook.CreateFont();
                        font1.FontHeight = 15 * 15;
                        font1.IsBold = true;
                        style0.SetFont(font1);
    
                        ICellStyle style = sxssfBook.CreateCellStyle();
                        style.VerticalAlignment = VerticalAlignment.Center;
                        style.Alignment = HorizontalAlignment.Center;
                        IFont font = sxssfBook.CreateFont();
                        style.SetFont(font);
    
                        ICellStyle style2 = sxssfBook.CreateCellStyle();
                        IFont font2 = sxssfBook.CreateFont();
                        font2.FontHeight = 15 * 15;
                        font1.IsBold = true;
                        style2.SetFont(font2);
    
                        Create(sheet, 5, cellCounts);
                        //建创行
                        ICell cell0 = sheet.GetRow(0).GetCell(0);
                        cell0.SetCellValue(fileName); //药物明细表
                        sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, cellCounts));
                        cell0.CellStyle = style0;
    
                        ICell cell1 = sheet.GetRow(1).GetCell(0);
                        cell1.SetCellValue(projectTitle + "" + projectName);//项目名称
                        sheet.AddMergedRegion(new CellRangeAddress(1, 1, 0, cellCounts));
                        cell1.CellStyle = style2;
    
                        ICell cell2 = sheet.GetRow(2).GetCell(0);
                        cell2.SetCellValue(generatedTime + "" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));//生成时间
                        sheet.AddMergedRegion(new CellRangeAddress(2, 2, 0, cellCounts));
                        cell2.CellStyle = style2;
    
                        ICell cell3 = sheet.GetRow(3).GetCell(0);
                        cell3.SetCellValue("");
                        sheet.AddMergedRegion(new CellRangeAddress(3, 3, 0, cellCounts));
    
                    }
                    else
                    {
                        int cellCounts = dtSource.Columns.Count;
                        Create(sheet, 1, cellCounts);
                    }
                    int rowCount = dtSource.Rows.Count + 1;
                    int cellCount = fieldDictionarys.Count;
                    //Create(sheet, 1, cellCount);
                    int index = 0;
                    if (sheetIndex==0)
                    {
                        index = 4;
                    }
                    int k = 0;
                    foreach (var fieldDictionary in fieldDictionarys)
                    {
                        string cellValue = fieldDictionary.Key;
                        sheet.GetRow(index).GetCell(k).SetCellValue(cellValue);
                        k++;
                    }
    
                    for (int i = 0; i < dtSource.Rows.Count; i++)
                    {
                        int row = index + i + 1;
                        int j = 0;
                        IRow currtRow = sheet.CreateRow(row);
                        foreach (var fieldDictionary in fieldDictionarys)
                        {
                            ICell cell = currtRow.CreateCell(j);
                            string fieldName = fieldDictionary.Value;
                            string cellValue = dtSource.Rows[i][fieldName].ToString();
                            sheet.GetRow(row).GetCell(j).SetCellValue(cellValue);
                            j++;
                        }
                    }
                    sheetIndex++;
                }
                var patUrl = serverPath;
                if (!FileHelperTools.IsExistDirectory(patUrl))
                {
                    FileHelperTools.CreateDirectory(patUrl);
                }
                var partName = UniqueKeyGenerator.GetDtRng_RandomNo();
                using (FileStream fileStream = File.Open(@"" + patUrl + fileName + "-" + partName + ".xlsx", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                    sxssfBook.Write(fileStream);
                    fileStream.Close();
                }
                return "/RandResult/" + fileName + "-" + partName + ".xlsx";
            }
    
    
            /// <summary>
            /// 导出药物库存表明细
            /// </summary>
            /// <param name="excelModels"></param>
            /// <param name="fileName"></param>
            /// <param name="serverPath"></param>
            /// <returns></returns>
            public static string GetDrugListStockBig(List<ExcelNewModel> excelModels, string fileName, string serverPath)
            {
                SXSSFWorkbook sxssfBook = new SXSSFWorkbook();
                sxssfBook.RandomAccessWindowSize = 1000;
                int sheetIndex = 0;
                foreach (var excelModel in excelModels)
                {
                    var dtSource = excelModel.ResultDataTable;
                    var fieldDictionarys = excelModel.FieldDictionarys;
                    var title = excelModel.Title;
                    NPOI.SS.UserModel.ISheet sheet = sxssfBook.CreateSheet(title);
                    ICellStyle dateStyle = sxssfBook.CreateCellStyle();
                    IDataFormat format = sxssfBook.CreateDataFormat();
                    int rowCount=1;
                    if (sheetIndex==0)
                    {
                        rowCount=  5;
                    }
                    
                    int cellCount = fieldDictionarys.Count;
                    Create(sheet, rowCount, cellCount);
                    int index = 0;
                    //第一个sheet添加标题
                    if (sheetIndex == 0)
                    {
                        foreach (var cellDictionary in excelModel.CellDictionarys)
                        {
                            var key = cellDictionary.Key;
                            var value = cellDictionary.Value;
                            sheet.GetRow(index).GetCell(0).SetCellValue(key);
                            sheet.GetRow(index).GetCell(1).SetCellValue(value);
                            index++;
                        }
                    }
                    if (excelModel.CellDictionarys!=null)
                    {
                        index += 1;
                    }
    
                    int k = 0;
                    foreach (var fieldDictionary in fieldDictionarys)
                    {
                        string cellValue = fieldDictionary.Key;
                        sheet.GetRow(index).GetCell(k).SetCellValue(cellValue);
                        k++;
                    }
    
                    for (int i = 0; i < dtSource.Rows.Count; i++)
                    {
                        int row = index + i + 1;
                        int j = 0;
                        IRow currtRow = sheet.CreateRow(row);
                        foreach (var fieldDictionary in fieldDictionarys)
                        {
                            ICell cell = currtRow.CreateCell(j);
                            string fieldName = fieldDictionary.Value;
                            string cellValue = dtSource.Rows[i][fieldName].ToString();
                            sheet.GetRow(row).GetCell(j).SetCellValue(cellValue);
                            j++;
                        }
                    }
                    sheetIndex++;
                }
                var patUrl = serverPath;
                if (!FileHelperTools.IsExistDirectory(patUrl))
                {
                    FileHelperTools.CreateDirectory(patUrl);
                }
                var partName = UniqueKeyGenerator.GetDtRng_RandomNo();
                using (FileStream fileStream = File.Open(@"" + patUrl + fileName + "-" + partName + ".xlsx", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
                {
                    sxssfBook.Write(fileStream);
                    fileStream.Close();
                }
                return "/RandResult/" + fileName + "-" + partName + ".xlsx";
            }
        }
    }



  • 相关阅读:
    BZOJ1299 [LLH邀请赛]巧克力棒
    BZOJ1046 [HAOI2007]上升序列
    BZOJ1798 [Ahoi2009]Seq 维护序列seq
    BZOJ2045 双亲数
    BZOJ2301 [HAOI2011]Problem b
    BZOJ1021 [SHOI2008]Debt 循环的债务
    BZOJ2618 [Cqoi2006]凸多边形
    BZOJ1069 [SCOI2007]最大土地面积
    BZOJ1051 [HAOI2006]受欢迎的牛
    2017年09月23日普级组 环
  • 原文地址:https://www.cnblogs.com/Kirins/p/12022319.html
Copyright © 2011-2022 走看看