2014-03-07 6 views
0

DataGridView의 내용을 어떻게 Backcolor/Forecolor 셀 서식 지정을 사용하여 Exel 파일에 저장할 수 있습니까? 나는 이런 식의 DGV를 가지고있다 : enter image description hereDataGridView를 Excel 파일로 내보내기

Excel로 데이터를 내보낼 때 데이터가 나오지만 Forecolor가 없으면 몇 가지 방법을 시도했지만 작동하지 않는다! 미리 감사드립니다!

개인 무효 btnExport_Click (객체 송신자있는 EventArgs E) {

 SaveFileDialog sfd = new SaveFileDialog(); 
     sfd.Filter = "Excel Documents (*.xls)|*.xls"; 
     sfd.FileName = "export.xls"; 
     if (sfd.ShowDialog() == DialogResult.OK) 
     { 
      //ToCsV(dataGridView1, @"c:\export.xls"); 
      ToCsV1(dataGridView1, sfd.FileName); 
     } 

}

개인 무효 ToCsV1 (DataGridView에 DGV 문자열 이름) { 문자열 stOutput = ""; // 제목 내보내기 : string sHeaders = "";

 for (int j = 0; j < dGV.Columns.Count; j++) 
      sHeaders = sHeaders.ToString() + Convert.ToString(dGV.Columns[j].HeaderText) + "\t"; 
     stOutput += sHeaders + "\r\n"; 
     // Export data. 
     for (int i = 0; i < dGV.RowCount - 1; i++) 
     { 
      string stLine = ""; 
      for (int j = 0; j < dGV.Rows[i].Cells.Count; j++) 
       stLine = stLine.ToString() + Convert.ToString(dGV.Rows[i].Cells[j].Value) + "\t"; 
      stOutput += stLine + "\r\n"; 
     } 
     Encoding utf16 = Encoding.GetEncoding(1254); 
     byte[] output = utf16.GetBytes(stOutput); 
     FileStream fs = new FileStream(filename, FileMode.Create); 
     BinaryWriter bw = new BinaryWriter(fs); 
     bw.Write(output, 0, output.Length); //write the encoded file 
     bw.Flush(); 
     bw.Close(); 
     fs.Close(); 
    } 
+0

Excel에서 셀 색상을 독립적으로 처리합니까? 내가 할 수 있다고 확신 할 수없는 (일부 광범위한 코딩을하지 않고) 것처럼? – Ben

+0

CSV는 원시 데이터가있는 텍스트 파일입니다. 서식을 내보내려면 원시 Excel 파일을 만들어야합니다. –

답변

0

시도는 ExcelXML에 수출하는

예 :

using (var writer = new StreamWriter(fileDialog.OpenFile(), Encoding.UTF8)) 
        { 
         if (format == "XML") 
         { 
          writer.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); 
          writer.WriteLine("<?mso-application progid=\"Excel.Sheet\"?>"); 
          writer.WriteLine("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\">"); 
          writer.WriteLine("<DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">"); 
          writer.WriteLine("<Author></Author>"); 
          writer.WriteLine("<Created>" + DateTime.Now.ToLocalTime().ToLongDateString() + "</Created>"); 
          writer.WriteLine("<LastSaved>" + DateTime.Now.ToLocalTime().ToLongDateString() + "</LastSaved>"); 
          writer.WriteLine("<Company></Company>"); 
          writer.WriteLine("<Version>12.00</Version>"); 
          writer.WriteLine("</DocumentProperties>"); 

          if (showGroupHeaders) 
           AddStyles(writer, groupDesc.Count()); 

          writer.WriteLine(
           "<Worksheet ss:Name=\"Silverlight Export\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">"); 
          writer.WriteLine("<Table>"); 
         } 

         writer.Write(text.ToString()); 
         if (format == "XML") 
         { 
          writer.WriteLine("</Table>"); 
          writer.WriteLine("</Worksheet>"); 
          writer.WriteLine("</Workbook>"); 
         } 

         writer.Close(); 
        } 

곳처럼 AddStyle :

private static void AddStyles(StreamWriter writer, int groupCount) 
      { 
       writer.WriteLine("<Styles>"); 

       for (int i = 0; i < groupCount; i++) 
       { 
        int shift = i % _headerColor.Count(); 
        var color = _headerColor[shift]; 
        writer.WriteLine("<Style ss:ID=\"st{0}\">", i + 1); 
        writer.WriteLine("<Interior ss:Color=\"#{0:X2}{1:X2}{2:X2}\" ss:Pattern=\"Solid\"/>", color.R, color.G, color.B); 
        writer.WriteLine("</Style>"); 
       } 

       writer.WriteLine("</Styles>"); 
      } 

그리고 설정 셀 배경색 :

string.Format("<Cell ss:StyleID=\"st{0}\"><Data ss:Type=\"String\">{1}</Data></Cell>", style, data); 
,
관련 문제