[英]Export to Excel with server side webapi and list
我從通用列表IEnumerable<myClass> objClass
上的API獲得響應。
在這里,我嘗試使用StreamWriter將列表導出到CSV文件
var serviceResponse = await services.GetProfileRepositoryAsync(requestDto, token);
if(requestDto.IsExportable)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
**writer.Write((serviceResponse.dto.NewSoftwareFileDto));**
writer.Flush();
stream.Position = 0;
return File(stream, "text/csv", "filesname.csv");
}
由於serviceResponse.dto.NewSoftwareFileDto
返回列表writer.Write
不會擰干內容。 一旦我將Objectresult與writer.Write writer.Write()
方法一起使用,它就會更早地工作。 現在我無法回憶了。
我想避免遍歷列表和寫入數據。
您不能使用StreamWriter.Write()
將DTO列表直接發送到MemoryStream
,因為StreamWriter.Write()
僅接受char
, char[]
或string
作為第一個參數。 由於要避免使用循環( for
或foreach
),因此可以使用LINQ從DTO的現有列表中創建一個List<string>
作為逗號分隔的值,然后將其內容寫入流中:
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
// create list of strings from DTO list
List<string> items = serviceResponse.dto.NewSoftwareFileDto.Select(x =>
string.Join(",", x.Property1, x.Property2, ...)).ToList();
// insert newline between every lines (i.e. list indexes)
string combined = string.Join(Environment.NewLine, items);
// write combined strings to StreamWriter
writer.Write(combined);
writer.Flush();
stream.Position = 0;
return File(stream, "text/csv", "filesname.csv");
請注意, Property1
, Property2
等表示DTO對象列表內的屬性名稱,具體取決於定義的順序。 在Select
使用的屬性名稱必須在NewSoftwareFileDto
內部可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.