簡體   English   中英

使用服務器端webapi和列表導出到Excel

[英]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()僅接受charchar[]string作為第一個參數。 由於要避免使用循環( forforeach ),因此可以使用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");

請注意, Property1Property2等表示DTO對象列表內的屬性名稱,具體取決於定義的順序。 Select使用的屬性名稱必須在NewSoftwareFileDto內部可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM