【问题标题】:TextWriter: Need to fetch data from DB to excel [duplicate]TextWriter:需要从数据库中获取数据到excel [重复]
【发布时间】:2021-01-27 15:31:57
【问题描述】:

我正在研究从 DB 读取数据(从数组(String[] getPersons) 作为输入)并将其写入 excel 文件的要求。我遇到了一种情况,在 DB 中,我的 DepartmentID 值为 1、2、3 等。其中 1 代表 CSE,2 代表 ECE,3 代表 IT 等。 现在,下面的代码正在获取 DepartmentId 的号码,而我需要为这些号码设置相应的部门。


var container = db.GetContainer(containerId);
var q = container.GetItemLinqQueryable<Student>();
var requests = q.Where(p => getStudents.Contains(p.StudentName)).ToFeedIterator();

using (var ms = new MemoryStream())
  {
TextWriter tw = new StreamWriter(ms);
 foreach (var request in requests)
                {
                    tw.WriteLine($"{request.DepartmentId},{request.StudentName}");

                }
                tw.Flush();           
                await ms.CopyToAsync(response.FileContent).ConfigureAwait(false);
   }

请注意,DB 中没有 DepartmentName 字段(也无法添加),我需要以某种方式将 DepartmentId 转换为相应的 DepartmentNames,然后将其写入 excel。有没有办法做到这一点?我愿意接受建议。 提前致谢!!!

【问题讨论】:

  • Excel 文件不是文本,它们是包含 XML 文件的 ZIP 包。您不能使用TextWriter 写入任何二进制文件,而不仅仅是 Excel 文件。您可以使用 EPPlus 或 NPOI 等库从集合中创建 Excel 文件,例如 sheet.Cells.LoadFromCollectioon(requests)
  • 似乎您需要详细说明 excel 部分。在我的回答中,您的代码将创建与以前相同的文件,但具有正确的部门名称。它仍然是逗号分隔(csv),可以通过 excel 打开。如果你希望它是一个 xls/xlsx 文件,它们是不同的格式(新的格式是 Panagiotis 提到的一个 zip 包),而不是旧的格式。请详细说明,我们可以为您提供更好的帮助。

标签: c# .net textwriter


【解决方案1】:

如果您拥有所有部门,如果它们不能以其他方式使用,您总是可以对其进行硬编码。

创建翻译方法:

    private static string GetDepartmentName(int id)
    {
        switch(id)
        {
            case 1:
                return "CSE";
            case 2:
                return "ECE";
            case 3:
                return "IT";
            default:
                throw new NotImplementedException("No such id!");
        }
    }

然后你可以在你的代码中使用它:

        using (var ms = new MemoryStream())
        {
            TextWriter tw = new StreamWriter(ms);
            foreach (var request in requests)
            {
                tw.WriteLine($"{GetDepartmentName(request.DepartmentId)},{request.StudentName}");

            }
            tw.Flush();
            await ms.CopyToAsync(response.FileContent).ConfigureAwait(false);
        }

然后只需在“GetDepartmentName”方法中添加所有其他部门。

希望这行得通,如果不行,请告诉我我错过了什么。

【讨论】:

  • 您不能使用 TextWriter 写入 Excel 文件。 Excel 文件是 ZIP 包
  • 我猜他把它写到一个 CSV 文件中,这是一种编写可以在 excel 中打开的文件的简单方法。有多个版本的 excel 文件,新版本是 zip 而不是旧格式。由于没有具体说明,我认为他想使用 CSV。
  • CSV 文件根本不是 Excel 文件。当前格式已经有 14 年历史了。它也是唯一一种由谷歌甚至微软等云提供商免费支持的 Excel 格式,也是唯一一种可以在网络服务器上轻松生成的格式。 “旧”格式并不旧,它已经过时了
  • 我听到了。但公平地说,他从未提到应该是 excel 格式。他希望结果出类拔萃。很容易做到这一点(今天仍然大量使用)是 csv 文件。我个人更喜欢 xslx 格式,但在许多较旧的系统中,您没有这种选择。
  • 导出为 CSV 并不是那么容易。如果字段包含逗号会怎样?数字和日期格式呢?非英文文本?有 很多 个问题询问为什么 Excel 无法通过双击打开 CSV 文件并在单个单元格中显示整行,或者因为与当前区域设置不匹配而破坏文本
猜你喜欢
  • 2017-11-23
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
相关资源
最近更新 更多