C# DataGridView使用彩色单元格显示Excel

C# DataGridView使用彩色单元格显示Excel,c#,sql-server,excel,C#,Sql Server,Excel,我看了很多例子和演示,但我看不懂 我正在尝试将datagridview转换为excel 我的结果 但它是这样转换成excel的 我想复制单元格的大小和颜色,但如何复制 我使用此代码转换为excel Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.

我看了很多例子和演示,但我看不懂

我正在尝试将datagridview转换为excel

我的结果

但它是这样转换成excel的

我想复制单元格的大小和颜色,但如何复制

我使用此代码转换为excel

        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        object misValue = System.Reflection.Missing.Value;

        Int16 i, j;

        xlApp = new Excel.Application();
        xlWorkBook = xlApp.Workbooks.Add(misValue);

        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        for (i = 0; i <= dataGridView1.RowCount - 2; i++)
        {
            for (j = 0; j <= dataGridView1.ColumnCount - 1; j++)
            {
                xlWorkSheet.Cells[i + 1, j + 1] = dataGridView1[j, i].Value.ToString();
            }
        }

        SaveFileDialog sfd = new SaveFileDialog();
        sfd.Filter = "Excel Documents (*.xls)|*.xls";
        sfd.FileName = listBox1.SelectedItem.ToString() + " " + listBox3.SelectedItem.ToString() + " Stok Reçeteleri" + ".xls";


        if (sfd.ShowDialog() == DialogResult.OK)
        {
            //ToCsV(dataGridView1, sfd.FileName); // Here dataGridview1 is your grid view name
            xlWorkBook.SaveAs(sfd.FileName, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            //xlWorkBook.SaveAs(sfd.FileName, Excel.XlFileFormat.X
            FileInfo fileInfo = new FileInfo(sfd.FileName);
        }


        xlWorkBook.Close(true, misValue, misValue);
        xlApp.Quit();

        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);
Excel.applicationxlapp;
Excel.工作簿;
Excel工作表;
对象错误值=System.Reflection.Missing.Value;
int16i,j;
xlApp=new Excel.Application();
xlWorkBook=xlApp.Workbooks.Add(错误值);
xlWorkSheet=(Excel.Worksheet)xlWorkBook.Worksheets.get_项(1);

对于(i=0;i请尝试将此代码导出到excel,而不是您正在使用的内容。不过,我将此代码用于web应用程序

private void ExportGridToExcel()
{
    Response.Clear();
    Response.Buffer = true;
    Response.ClearContent();
    Response.ClearHeaders();
    Response.Charset = "";
    string FileName = "SomeFileName" + DateTime.Now + ".xls";
    StringWriter strwritter = new StringWriter();
    HtmlTextWriter htmltextwrtter = new HtmlTextWriter(strwritter);
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);
    GridView1.GridLines = GridLines.Both;
    GridView1.HeaderStyle.Font.Bold = true;
    GridView1.RenderControl(htmltextwrtter);
    Response.Write(strwritter.ToString());
    Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
    /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
       server control at run time. */
}

将内部循环更新为:

for (i = 0; i <= dataGridView1.RowCount - 2; i++)
            {
                for (j = 0; j <= dataGridView1.ColumnCount - 1; j++)
                {
                    Range range = (Range)xlWorkSheet.Cells[i + 1, j + 1];
                    xlWorkSheet.Cells[i + 1, j + 1] = dataGridView1[j, i].Value.ToString();
                    range.Interior.Color = System.Drawing.ColorTranslator.ToOle(dataGridView1.Rows[i].DefaultCellStyle.BackColor );

                }
            }

请参阅:

您最好使用epplus而不是office interop,尤其是服务器端。谢谢您的建议。是的,使用epplus而不是interop。interop应该是最后的手段,即使这样,您也应该重新考虑。我只是将这一行更改为range.Interior.Color=System.Drawing.ColorTranslator.ToOle(dgv.Rows[I].DefaultCellStyle.BackColor);
using Microsoft.Office.Interop.Excel;