【发布时间】:2021-02-16 12:52:12
【问题描述】:
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class ExcelReportsController : Controller
{
private ExcelContext db = new ExcelContext();
[Route("/ExportToExcel")]
[HttpGet]
public void ExportPersonsToExcel()
{
var sqlParameters = new List<SqlParameter>();
sqlParameters.Add(new SqlParameter("@id", "1"));
var persons = db.Database.SqlQuery<TestExcel>("SELECT * FROM persons(@id)", sqlParameters.ToArray()).ToArray();
DataTable table = (DataTable)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(persons), (typeof(DataTable)));
using (SpreadsheetDocument document = SpreadsheetDocument.Create("TestNewData.xlsx", SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
var sheetData = new SheetData();
worksheetPart.Worksheet = new Worksheet(sheetData);
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" };
sheets.Append(sheet);
Row headerRow = new Row();
List<String> columns = new List<string>();
foreach (DataColumn column in table.Columns)
{
columns.Add(column.ColumnName);
Cell cell = new Cell();
cell.DataType = CellValues.String;
cell.CellValue = new CellValue(column.ColumnName);
headerRow.AppendChild(cell);
}
sheetData.AppendChild(headerRow);
foreach (DataRow dsrow in table.Rows)
{
Row newRow = new Row();
foreach (String col in columns)
{
Cell cell = new Cell();
cell.DataType = CellValues.String;
cell.CellValue = new CellValue(dsrow[col].ToString());
newRow.AppendChild(cell);
}
sheetData.AppendChild(newRow);
}
workbookPart.Workbook.Save();
}
}
}
}
我有以下代码,但是当我要求提供 excel 文件时,没有任何反应。我希望它在我输入该 URL 时自动下载。有什么解决办法吗?
也许是流?但是我将如何实现呢?我是使用这个库的新手——所以请耐心等待。
【问题讨论】:
-
在 Asp.Net 中你可以只使用 FileResult:please have a look
-
@newbie 你需要从你的方法中返回一些东西,现在它是一个
public void方法。 returning-a-file-to-view-download-in-asp-net-mvc -
所以,如果我返回一个“文件”。我怎样才能做到这一点?返回新文件(工作簿等)
-
“我该怎么做?” 给了你两个例子^^。看看他们。如果它们不适合您,请告诉我们原因。