【问题标题】:How to create a .csv file in asp.net?如何在 asp.net 中创建 .csv 文件?
【发布时间】:2012-11-04 20:07:46
【问题描述】:

如何通过在 asp.net 中读取数据库来创建 .CSV 文件?谁能建议我如何在 asp.net 中创建 .CSV 文件?

提前致谢。

【问题讨论】:

  • 请展示您尝试过的代码,并在流程的每个步骤中列举您无法解决的问题。
  • @Alexei:它得到了 2 票赞成,耶..!! :) :)
  • 如果您使用的是DataTable 类,请检查此gist.github.com/riyadparvez/4467668

标签: c# asp.net


【解决方案1】:

检查这个:Exporting DataTable to CSV File Format

public void CreateCSVFile(DataTable dt, string strFilePath)    
    {    
        #region Export Grid to CSV     

        // Create the CSV file to which grid data will be exported.    
        StreamWriter sw = new StreamWriter(strFilePath, false);

        // First we will write the headers.    
        //DataTable dt = m_dsProducts.Tables[0];    
        int iColCount = dt.Columns.Count;

        for (int i = 0; i < iColCount; i++)    
        {    
            sw.Write(dt.Columns[i]);    
            if (i < iColCount - 1)    
            {    
                sw.Write(",");    
            }    
        }    
        sw.Write(sw.NewLine);

        // Now write all the rows.    
        foreach (DataRow dr in dt.Rows)    
        {    
            for (int i = 0; i < iColCount; i++)    
            {    
                if (!Convert.IsDBNull(dr[i]))    
                {    
                    sw.Write(dr[i].ToString());    
                }    
                if (i < iColCount - 1)    
                {    
                    sw.Write(",");    
                }    
            }    
            sw.Write(sw.NewLine);    
        }    
        sw.Close(); 

        #endregion    
    }

如果您尝试强制下载始终提供另存为,则应将内容类型设置为 application/octet-stream。

Source:

 string attachment = "attachment; filename=MyCsvLol.csv";
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ClearHeaders();
    HttpContext.Current.Response.ClearContent();
    HttpContext.Current.Response.AddHeader("content-disposition", attachment);
    HttpContext.Current.Response.ContentType = "text/csv";
    HttpContext.Current.Response.AddHeader("Pragma", "public");

    var sb = new StringBuilder();
    foreach(var line in DataToExportToCSV)
      sb.AppendLine(TransformDataLineIntoCsv(line));

    HttpContext.Current.Response.Write(sb.ToString());
    HttpContext.Current.Response.End();

One of the simplest 正在使用FileHelpers Library

FileHelpers.CsvEngine.DataTableToCsv(dataTable, filename);

WriteFile(继承自 FileHelperEngine)重载。写一个数组 记录到指定文件。

WriteStream(继承自FileHelperEngine)已重载。将记录数组写入 指定的流。

WriteString(继承自 FileHelperEngine)重载。将记录数组写入字符串 并返回它。

参考:
Write to CSV file and export it?
Export Data to a Comma Delimited (CSV) File for an Application Like Excel
export datatable to CSV with Save File Dialog box - C#

【讨论】:

  • 您编写 CSV 文件的代码不完整。如果字段包含逗号,则 Excel 等程序将无法正确解析。
  • @JonathanWood:我还没有完整地测试过代码,也许你更清楚stackoverflow 不是代码提供方。本网站的目的是帮助不做他人的所有工作。指定的参考足以指导他解决他们的问题。
  • 请查看我的 stackoverflow 分数,您可能会看到我确实知道 stackoverflow 是关于什么的。是的,我认为您的回答很有帮助。但它是不完整的,OP 可能没有意识到这一点。根据他的数据,实际上可能不足以解决他们的问题。这就是我指出的原因。
  • @JonathanWood:谢谢你的建议。我在参考中指出了该链接,因为它属于asp.net website and also have video tutorial
【解决方案2】:

您可以在文章Reading and Writing CSV Files in C# 中查看如何创建 CSV 文件。

您可以在文章Creating Downloadable Content Dynamically 中了解如何动态生成文件内容,但使其行为类似于可下载文件。

【讨论】:

  • 听起来太复杂了……您仍然需要设置“response.ContentType()”以提示用户“保存”Web 服务器返回的 .csv。恕我直言...
  • 哪一部分太复杂了?看到第二篇确实设置了Response.ContentType吗? (顺便说一句,提到的第二篇文章似乎基本上是您在回答中建议的内容。但第一篇文章对 CSV 处理有更完整的实现。)
【解决方案3】:

你为什么不能:

1) 查询数据库(例如使用 SQL 阅读器),

2) 将您的 HTTP 响应标头 (response.ContentType) 设置为 MIME 类型“application/csv”

3) 以逗号分隔 (CSV) 格式写出 (response.Write) 结果集的每一行?

以下是该方法的一个示例:

【讨论】:

    【解决方案4】:

    试试这个:

    string filePath = @"C:\test.csv";  
    string delimiter = ",";  
    
    string[][] output = new string[][]{  
    new string[]{"Col 1 Row 1", "Col 2 Row 1", "Col 3 Row 1"},  
    new string[]{"Col1 Row 2", "Col2 Row 2", "Col3 Row 2"}  
    };  
    int length = output.GetLength(0);  
    StringBuilder sb = new StringBuilder();  
    for (int index = 0; index < length; index++)  
    sb.AppendLine(string.Join(delimiter, output[index]));  
    
    File.WriteAllText(filePath, sb.ToString()); 
    

    了解更多Help

    【讨论】:

      【解决方案5】:

      无论如何,如果您允许双引号、逗号、空格等特殊字符出现在您的文件中,您应该找到任何强大的 CSV 库。

      【讨论】:

        【解决方案6】:

        认为您正在寻找CSV 文件格式。它实际上是一个普通的文本文件,具有非常简单的结构You can refer Wiki here

        您可以通过从数据库中获取数据并根据需要将数据写入文本文件来自己制作。

        以下是 CSV 文件的内容示例:

        Year,Make,Model
        1997,Ford,E350
        2000,Mercury,Cougar
        

        文件中有3列:YearMakeModel,2行数据分别是:1997,Ford,E3502000,Mercury,Cougar

        【讨论】:

          猜你喜欢
          • 2014-07-07
          • 1970-01-01
          • 2020-08-18
          • 1970-01-01
          • 1970-01-01
          • 2017-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多