使用颜色代码编写CSV文件

5
我正在从Datatable编写csv文件。请查看我的代码如下:
      public static void SaveDataTableToCsvFile(string AbsolutePathAndFileName, DataTable TheDataTable, params string[] Options)
    {
        //variables
        string separator;
        if (Options.Length > 0)
        {
            separator = Options[0];
        }
        else
        {
            separator = ""; //default
        }
        string quote = "";

        FileInfo info = new FileInfo(AbsolutePathAndFileName);

        if (IsFileLocked(info))
        {
            MessageBox.Show("File is in use, please close the file");
            return;
        }
        //create CSV file
        StreamWriter sw = new StreamWriter(AbsolutePathAndFileName);

        //write header line
        int iColCount = TheDataTable.Columns.Count;
        for (int i = 0; i < iColCount; i++)
        {
            sw.Write(TheDataTable.Columns[i]);
            if (i < iColCount - 1)
            {
                sw.Write(separator);
            }
        }
        sw.Write(sw.NewLine);

        //write rows
        foreach (DataRow dr in TheDataTable.Rows)
        {
            for (int i = 0; i < iColCount; i++)
            {
                if (!Convert.IsDBNull(dr[i]))
                {
                    string data = dr[i].ToString();
                    data = data.Replace("\"", "\\\"").Replace(",", " ");
                    sw.Write(quote + data + quote);
                }
                if (i < iColCount - 1)
                {
                    sw.Write(separator);
                }
            }
            sw.Write(sw.NewLine);

        }
        sw.Close();
    }

代码对我有效,但我需要在csv的某些单元格中添加颜色代码。

我该怎么做?


1
这将违背CSV文件的目的。您无法使用CSV文件完成此操作。 - Adriaan Stander
可能是为Excel中的CSV文件制作彩色单元格的重复问题。 - Adriaan Stander
4个回答

24

CSV 是一种没有任何格式的纯数据格式。毕竟它只是一个纯文本文件。因此,无法添加颜色。


2
为什么?如果他们的问题是“我该如何做到这一点”,我认为“你无法做到”是一个答案。 - Joey
@Joey,你确定吗?我不能做那个? - Lajja Thaker
1
是的,我确定。请阅读链接的参考资料,这是一种事实上的CSV标准。你在里面看到任何关于格式的内容吗?我没有看到。 - Joey

2
您可能希望使用一些外部实用程序输出 .xls(或等效文件),而不是 .csv。或者将 csv 转换为 .xls,以便即使有颜色编码也能够实现。

我正在尝试的东西要复杂得多。 - Sudhir Kaushik

1

Joey是完全正确的。

但是,如果你的情况允许输出XLSX而不是CSV,那么EPPlus可能是适合你的解决方案。

例如:

using (ExcelPackage ep = new ExcelPackage(AbsolutePathAndFileName))
{
    ExcelWorksheet worksheet = ep.Workbook.Worksheets.Add("Worksheet1");
    worksheet.Cells["A1"].LoadFromDataTable(TheDataTable, true); 
    worksheet.Cells["F4"].BackgroundColor.SetColor(Color.Red);
    ep.Save();
}

如果您有4个数据表,并且需要将它们全部添加到一个工作表中,每个数据表之间有2行分隔符,那么EPPlus是否仍然可以处理?我注意到.Save(),我通常使用Response.Headers导出并允许用户从Web保存或打开Excel文件,EPPlus是否支持这一点..? - MethodMan

0

CSV(逗号分隔值)文件是一种文本文件。如果不将其更改为另一种文件格式(例如RTF),则无法向文件添加颜色。


RTF是完全不同的格式,代表着富文本而不是表格数据。 - Joey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接