C# C OpenXML使Excel文件可下载
我有下面的代码,但是当我请求excel文件时,什么都没有发生。我想它自动下载时,我输入该网址。有什么解决办法吗C# C OpenXML使Excel文件可下载,c#,openxml,C#,Openxml,我有下面的代码,但是当我请求excel文件时,什么都没有发生。我想它自动下载时,我输入该网址。有什么解决办法吗 也许是小溪?但我将如何实现这一点?我还没有使用这个库,所以请耐心等待。首先,将方法的返回类型更改为 然后,在使用块之后,添加以下内容: [EnableCors(origins: "*", headers: "*", methods: "*")] public class ExcelReportsController : Con
也许是小溪?但我将如何实现这一点?我还没有使用这个库,所以请耐心等待。首先,将方法的返回类型更改为 然后,在使用块之后,添加以下内容:
[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();
}
}
}
}
它从您的文件创建一个文件,然后返回一个FileStreamResult。这根长线是最长的。注意,FileStreamResult应该是流
如果希望为下载的文件提供名称,可以使用文件的重载版本,因此只需传递第三个string类型的参数,如下所示:
返回Filestream,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,CustomName.xlsx 我找到了解决办法
我们必须返回一条HttpResponseMessage。然后在using块之后,我们添加以下代码:
var stream = System.IO.File.Open("TestNewData.xlsx", FileMode.Open);
return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
在Asp.Net中,您可以只使用FileResult:@newbie。您需要从方法中返回一些内容,现在它是一个公共的void方法。所以,如果我返回一个文件。我该怎么做?返回新文件工作簿等。如何执行此操作?给你举了两个例子。看一看。如果它们对您不起作用,请告诉我们为什么不起作用。当我将此解决方案与IHttpActionResult return OkFileetc一起使用时。。我收到以下错误:非可开票成员“文件”不能像方法一样使用。您使用的是Web API 2 ASP.NET 4.x吗?我的答案是假设.NETCore或.NET5.Ahh。我正在使用dotnet框架
var path = "TestNewData.xlsx";
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new FileStream(path, FileMode.Open, FileAccess.Read);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType =
new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
return result;