一:服务端返回字节流,小程序写文件
(1)后端代码 .Net Core 用到ExcelPackage
public async Task<IActionResult> ExportIo([FromBody]Parameter parameter)
{
FactoryService factoryService = new FactoryService(_iServiceProvider);
//获得数据
var listData = await factoryService.GetAllDataNew(parameter);
var result = new object();
using (ExcelPackage excelPackage = new ExcelPackage())
{
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("YuHong");
worksheet.Cells[1, 1].Value = "生产线";
worksheet.Cells[1, 2].Value = "生产工厂";
worksheet.Cells[1, 3].Value = "生产时间";
worksheet.Cells[1, 4].Value = "上传时间";
worksheet.Cells[1, 5].Value = "12位转换码";
worksheet.Cells[1, 6].Value = "16位防窜码";
var rowNum = 2;
foreach (var queryResult in listData)
{
worksheet.Cells["A" + rowNum].Value = queryResult.Beltline;
worksheet.Cells["B" + rowNum].Value = queryResult.Factory;
worksheet.Cells["C" + rowNum].Value = queryResult.MakeTime;
worksheet.Cells["D" + rowNum].Value = queryResult.UpDate;
worksheet.Cells["E" + rowNum].Value = queryResult.ConvertCode;
worksheet.Cells["F" + rowNum].Value = queryResult.ProductCode;
rowNum++;
}
using (var cells = worksheet.Cells[1, 1, 1, 6])
{
cells.Style.Font.Bold = true;
cells.Style.Fill.PatternType = ExcelFillStyle.Solid;
cells.Style.Fill.BackgroundColor.SetColor(Color.LightGray);
}
//返回二进制字节数组
result = excelPackage.GetAsByteArray();
}
return new FileContentResult((byte[])result, "application/x-xls");
}
(2)前端代码
var reqTask = wx.request({
url: "http://localhost:5000/api/download/exportIo",
data: {
xxxxx:xxxxxx"
},
header: { "content-type": "application/json", cookie: cookie },
method: "POST",
dataType: "json",
responseType: "arraybuffer",//注意这里的responseType
success: result => {
console.log(result);
var fileManager = wx.getFileSystemManager();
var FilePath = wx.env.USER_DATA_PATH + "/" + "dataFile.xlsx";
fileManager.writeFile({
data: result.data,
filePath: FilePath,
encoding: "binary",//编码方式
success: result => {
wx.openDocument({ //我这里成功之后直接打开
filePath: FilePath,
fileType: "xlsx",
success: result => {
console.log("打开文档成功");
},
fail: result => {
console.log(result);
}
});
wx.hideLoading();
},
fail: res => {
console.log(res);
}
}),
二:后端生成excel文件,返回下载地址,供小程序下载
ExcelPackage.Save() 保存数据到本地Excel文件中,返回文件地址
public async Task<string> Export([FromBody]Parameter parameter)
{
string sWebRootFloder = _hostingEnvironment.WebRootPath;
string sFileName = @"bak/DataFile.xlsx";
string URL = string.Format("{0}://{1}/{2}", Request.Scheme, Request.Host, sFileName);
FileInfo file = new FileInfo(Path.Combine(sWebRootFloder, sFileName));
if (file.Exists)
{
file.Delete();
file = new FileInfo(Path.Combine(sWebRootFloder, sFileName));
}
FactoryService factoryService=new FactoryService(_iServiceProvider);
var ListData = await factoryService.GetAllData(parameter);
using (ExcelPackage excelPackage = new ExcelPackage(file))
{
ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("YuHong");
worksheet.Cells[1, 1].Value = "生产线";
worksheet.Cells[1, 2].Value = "生产工厂";
worksheet.Cells[1, 3].Value = "生产时间";
worksheet.Cells[1, 4].Value = "上传时间";
worksheet.Cells[1, 5].Value = "16位防窜码";
var rowNum = 2;
foreach (var queryResult in ListData)
{
worksheet.Cells["A" + rowNum].Value = queryResult.Beltline;
worksheet.Cells["B" + rowNum].Value = queryResult.Factory;
worksheet.Cells["C" + rowNum].Value = queryResult.MakeTime;
worksheet.Cells["D" + rowNum].Value = queryResult.UpDate;
worksheet.Cells["E" + rowNum].Value = queryResult.ProductCode;
rowNum++;
}
using (var cells=worksheet.Cells[1,1,1,5])
{
cells.Style.Font.Bold = true;
cells.Style.Fill.PatternType = ExcelFillStyle.Solid;
cells.Style.Fill.BackgroundColor.SetColor(Color.LightGray);
}
excelPackage.Save();
}
return URL;
}
var fileManager = wx.getFileSystemManager();
var FilePath = wx.env.USER_DATA_PATH + "/" + "dataFile.xlsx";
var downTask = wx.downloadFile({
url: this.fileUrl,
success: result => {
fileManager.saveFile({
tempFilePath: result.tempFilePath,
filePath: FilePath,
success: result => {
if (result.errMsg == "saveFile:ok") {
wx.openDocument({
filePath: FilePath,
fileType: "xlsx",
success: result => {
console.log("打开文档成功");
},
});
}