mirror of
https://gitee.com/dotnetchina/MiniExcel.git
synced 2024-12-04 04:48:06 +08:00
144 lines
4.7 KiB
C#
144 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Net;
|
|
|
|
|
|
public class Program
|
|
{
|
|
public static void Main(string[] args) => CreateHostBuilder(args).Build().Run();
|
|
|
|
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
|
|
}
|
|
|
|
public class Startup
|
|
{
|
|
public void ConfigureServices(IServiceCollection services) => services.AddMvc();
|
|
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
|
|
{
|
|
app.UseStaticFiles();
|
|
app.UseRouting();
|
|
app.UseEndpoints(endpoints =>
|
|
{
|
|
endpoints.MapControllerRoute(
|
|
name: "default",
|
|
pattern: "{controller=api}/{action=Index}/{id?}");
|
|
});
|
|
}
|
|
}
|
|
|
|
public class ApiController : Controller
|
|
{
|
|
public IActionResult Index()
|
|
{
|
|
return new ContentResult
|
|
{
|
|
ContentType = "text/html",
|
|
StatusCode = (int)HttpStatusCode.OK,
|
|
Content = @"<html><body>
|
|
<a href='Home/DownloadExcel'>DownloadExcel</a><br>
|
|
<a href='Home/DownloadExcelFromTemplatePath'>DownloadExcelFromTemplatePath</a><br>
|
|
<a href='Home/DownloadExcelFromTemplateBytes'>DownloadExcelFromTemplateBytes</a><br>
|
|
<p>Upload Excel</p>
|
|
<form method='post' enctype='multipart/form-data' action='/api/uploadexcel'>
|
|
<input type='file' name='excel'> <br>
|
|
<input type='submit' >
|
|
</form>
|
|
</body></html>"
|
|
};
|
|
}
|
|
|
|
public IActionResult DownloadExcel()
|
|
{
|
|
var values = new[] {
|
|
new { Column1 = "MiniExcel", Column2 = 1 },
|
|
new { Column1 = "Github", Column2 = 2}
|
|
};
|
|
var memoryStream = new MemoryStream();
|
|
memoryStream.SaveAs(values);
|
|
memoryStream.Seek(0, SeekOrigin.Begin);
|
|
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
|
{
|
|
FileDownloadName = "demo.xlsx"
|
|
};
|
|
}
|
|
|
|
public IActionResult DownloadExcelFromTemplatePath()
|
|
{
|
|
string templatePath = "TestTemplateComplex.xlsx";
|
|
|
|
Dictionary<string, object> value = new Dictionary<string, object>()
|
|
{
|
|
["title"] = "FooCompany",
|
|
["managers"] = new[] {
|
|
new {name="Jack",department="HR"},
|
|
new {name="Loan",department="IT"}
|
|
},
|
|
["employees"] = new[] {
|
|
new {name="Wade",department="HR"},
|
|
new {name="Felix",department="HR"},
|
|
new {name="Eric",department="IT"},
|
|
new {name="Keaton",department="IT"}
|
|
}
|
|
};
|
|
|
|
MemoryStream memoryStream = new MemoryStream();
|
|
memoryStream.SaveAsByTemplate(templatePath, value);
|
|
memoryStream.Seek(0, SeekOrigin.Begin);
|
|
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
|
{
|
|
FileDownloadName = "demo.xlsx"
|
|
};
|
|
}
|
|
|
|
private static Dictionary<string, Byte[]> TemplateBytesCache = new Dictionary<string, byte[]>();
|
|
|
|
static ApiController()
|
|
{
|
|
string templatePath = "TestTemplateComplex.xlsx";
|
|
byte[] bytes = System.IO.File.ReadAllBytes(templatePath);
|
|
TemplateBytesCache.Add(templatePath, bytes);
|
|
}
|
|
|
|
public IActionResult DownloadExcelFromTemplateBytes()
|
|
{
|
|
byte[] bytes = TemplateBytesCache["TestTemplateComplex.xlsx"];
|
|
|
|
Dictionary<string, object> value = new Dictionary<string, object>()
|
|
{
|
|
["title"] = "FooCompany",
|
|
["managers"] = new[] {
|
|
new {name="Jack",department="HR"},
|
|
new {name="Loan",department="IT"}
|
|
},
|
|
["employees"] = new[] {
|
|
new {name="Wade",department="HR"},
|
|
new {name="Felix",department="HR"},
|
|
new {name="Eric",department="IT"},
|
|
new {name="Keaton",department="IT"}
|
|
}
|
|
};
|
|
|
|
MemoryStream memoryStream = new MemoryStream();
|
|
memoryStream.SaveAsByTemplate(bytes, value);
|
|
memoryStream.Seek(0, SeekOrigin.Begin);
|
|
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
|
{
|
|
FileDownloadName = "demo.xlsx"
|
|
};
|
|
}
|
|
|
|
[HttpPost("api/uploadexcel")]
|
|
public IActionResult UploadExcel(IFormFile excel)
|
|
{
|
|
var stream = new MemoryStream();
|
|
excel.CopyTo(stream);
|
|
|
|
foreach (var item in stream.Query(true))
|
|
{
|
|
// do your logic etc.
|
|
}
|
|
|
|
return Ok("File uploaded successfully");
|
|
}
|
|
} |