public async Task UploadBatchDelegatesToPublishingEndPoint() { Mock <IFormFile> file = new Mock <IFormFile>(); byte[] contents = { 3, 63, 8, 100 }; MemoryStream ms = new MemoryStream(); StreamWriter writer = new StreamWriter(ms); writer.Write(File.Create("blah blah")); await writer.FlushAsync(); ms.Position = 0; file.Setup(_ => _.CopyToAsync(It.IsAny <Stream>(), It.IsAny <CancellationToken>())) .Returns((Stream stream, CancellationToken token) => ms.CopyToAsync(stream)) .Verifiable(); file.SetupGet(x => x.Length).Returns(contents.Length); BatchUploadResponse expectedResponse = new BatchUploadResponse { BatchId = Guid.NewGuid().ToString(), Url = "http:whatever" }; _publishingApiClient .UploadBatch(Arg.Any <BatchUploadRequest>()) .Returns(new ApiResponse <BatchUploadResponse>(HttpStatusCode.OK, expectedResponse)); OkObjectResult result = await _publishController.UploadBatch(file.Object) as OkObjectResult; result.Should().NotBeNull(); result? .Value .Should() .BeSameAs(expectedResponse); }
protected void btnUpload_Click(object sender, EventArgs e) { string fileName = file.PostedFile.FileName; if (string.IsNullOrEmpty(fileName)) { return; } FileInfo fi = new FileInfo(fileName); string[] exts = new string[] { ".xls", ".xlsx" }; if (!exts.ToList().Exists(ext => ext == fi.Extension)) { this.ltlError.Text = "请上传Excel文件。"; } else { //上传文件 fileName = string.Format("{0}Documents\\TempFolder\\{1:ms}_{2}", this.Request.PhysicalApplicationPath, DateTime.Now, fi.Name); AsposeHelper.CheckPath(fileName); file.PostedFile.SaveAs(fileName); string templateFileName = AsposeHelper.GetTemplateFileName(documentID); DataTable dt = AsposeHelper.GetTemplateDataTable(documentID); BatchUploadResponse response = AsposeHelper.ExcelToDataTable(templateFileName, fileName, dt); if (response.IsVerified) { PersistData(response.Data); } ShowResult(response.GetErrors()); } }
/// <summary> /// Excel文件转换为DataTable. /// </summary> public static BatchUploadResponse ExcelToDataTable(string templateFileName, string fileName, DataTable dt) { BatchUploadResponse response = new BatchUploadResponse(fileName); if (!File.Exists(fileName)) { response.AddError(0, "文件不存在!"); return(response); } Workbook workbook = new Workbook(); // 打开模板 workbook.Open(templateFileName); Worksheet worksheet = workbook.Worksheets[dt.TableName]; if (worksheet == null) { response.AddError(0, "模板和配置文件不匹配,请联系管理员。"); return(response); } int startRow = worksheet.Cells.MaxDataRow; if (startRow > 0) { startRow += 1; } // 打开文件 workbook.Open(fileName); worksheet = workbook.Worksheets[dt.TableName]; if (worksheet == null) { response.AddError(0, "上传的文件和模板不匹配,请下载最新模板。"); return(response); } int maxRow = worksheet.Cells.MaxDataRow; int maxCol = worksheet.Cells.MaxDataColumn; //datatable = worksheet.Cells.ExportDataTable(0, 0, worksheet.Cells.MaxRow + 1, worksheet.Cells.MaxColumn + 1); for (int ii = startRow; ii <= maxRow; ii++) { DataRow dr = dt.NewRow(); try { for (int jj = 0; jj <= dt.Columns.Count - 1; jj++) { DataColumn col = dt.Columns[jj]; object value = worksheet.Cells[ii, jj].Value; if (!string.IsNullOrEmpty(col.Namespace)) { value = GetMappingValue(col.Namespace, value); } dr[jj] = Utils.DataConvert(col.DataType, value); } dt.Rows.Add(dr); } catch (Exception ex) { response.AddError(ii, ex.Message); } } response.Data = dt; return(response); }