使用npoi讀取建立Excel,經過流如今文件

原本代碼已經寫好了,傳遞給前臺文件路徑就能夠,後來同事告訴我,給路徑可能下載不了,文件可能放在另外一臺服務器,告訴我說用流進行下載,而後就開始百度加上找如今公司的代碼,作出來了,感受怪怪的。數組

//判斷路徑是否存在,不存在則建立服務器

var basePath = Path.Combine(ProjectConfig.BaseFolder));app

if(!File.Exists(basePath )){System.IO.Directory.CreateDirectory(basePath);}指針

//待讀取文件路徑對象

string filePath = Path.Combine(basePath,"xxx.xls");ci

//獲取HSSFWorkbook對象字符串

HSSFWorkbook workbook = (HSSFWorkbook)OpenWorkbook(filePath);string

//操做sheetit

ISheet sheet = workbook.GetSheetAt(0);io

//設置生成下拉框的行和列;綁定下拉框和做用區域
sheet.AddValidationData(new HSSFDataValidation(new CellRangeAddressList(4, 30, 0, 0),
DVConstraint.CreateExplicitListConstraint(字符串類型數組)));

//設置標題
ICell titleRow = sheet.GetRow(0).GetCell(0);
titleRow.SetCellValue(titleRow.StringCellValue.Replace("x", year));

//導出Excel

FileStream stream = new FileStream(filePath, FileMode.Create, System.IO.FileAccess.ReadWrite);
workbook.Write(stream);//設置模板寫入流中用於導出

//流轉換成二進制數組

BinaryReader r = new BinaryReader(stream);
r.BaseStream.Seek(0, SeekOrigin.Begin);//將文件指針設置到文件開
byte[] pReadByte = r.ReadBytes((int)r.BaseStream.Length);
//關閉流

stream.Close();
stream.Dispose();

//返回待下載文件

Stream stream = new MemoryStream(buffer);
stream.Seek(0, SeekOrigin.Begin);//設置stream的position爲流的開始
return stream;

 

//Controller代碼

public HttpResponseMessage xxx() {             HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);             var res = _aviationProtectionService.xxx();//返回的流             result.Content = new StreamContent(res);             result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");             result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");             result.Content.Headers.ContentDisposition.FileName = "xxx.xls";             return result;   }

相關文章
相關標籤/搜索