2012-08-22 82 views
2

我正在从Datatable编写csv文件。检查我的代码如下用颜色代码编写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文件来做到这一点。 –

+0

[在csv文件中为Excel制作颜色单元格]可能的副本(http://stackoverflow.com/questions/5716069/make-color-cell-in-csv-file-for-excel) –

回答

14

CSV是一种没有任何格式的纯数据格式。毕竟这是一个纯文本文件。所以不,没有办法添加颜色。

+2

为什么?如果他们的问题是»我该怎么做?«我认为答案»你不能«是一个。 – Joey

+0

@Joey你确定吗?我不能这样做 ? –

+0

是的,我确定。阅读链接参考,这是事实上的CSV标准。你看到有关格式化的内容吗?我不。 – Joey

1

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

+0

尽管RTF是一种完全不同的格式,它代表了丰富文本而不是表格数据。 – Joey

1

乔伊绝对是对的。

但是,如果您的情况允许您输出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(); 
} 
+0

所以如果你有4个Datatables,并且需要将它们全部添加到一个单独的工作表中并将两行分隔开来,那么'EPPlus'仍然会处理这个问题,我注意到了.'Save()'我用来使用'Response .Headers'导出并允许用户保存或打开网络上的Excel,EPPlus是否支持他..? – MethodMan

1

你可能想输出一个.xls(或同等学历),而不是一个.csv使用一些外部实用工具或CSV文件转换为.xls,以便有颜色编码甚至可以

+0

http://stackoverflow.com/questions/3189308/convert-csv-to-xls-in-java – rshetye