C# ASP.Net到Excel导出-列宽和交替行着色

C# ASP.Net到Excel导出-列宽和交替行着色,c#,asp.net,excel,C#,Asp.net,Excel,我使用以下方法最终创建一个CSV文件,并将该文件作为对客户端请求的响应返回 如何将列宽更改为autofit并对行进行交替着色? public static void ExportToCSV(DataTable dt, HttpResponseBase response, string filename) { response.AddHeader("content-disposition", "attachment; filename=" + filename); response

我使用以下方法最终创建一个CSV文件,并将该文件作为对客户端请求的响应返回

如何将列宽更改为autofit并对行进行交替着色?

public static void ExportToCSV(DataTable dt, HttpResponseBase response, string filename)
{
    response.AddHeader("content-disposition", "attachment; filename=" + filename);
    response.ClearContent();
    response.ContentType = "application/vnd.ms-excel";
    response.Charset = "UTF-8";
    response.ContentEncoding = System.Text.Encoding.Unicode;
    response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); 

    string tab = "";
    foreach (DataColumn dc in dt.Columns)
    {
        if (!dc.ColumnName.StartsWith("_"))
        {
            response.Write(tab + dc.ColumnName);
            tab = "\t";
        }
    }
    response.Write("\n");

    int i;
    foreach (DataRow dr in dt.Rows)
    {
        tab = "";
        for (i = 0; i < dt.Columns.Count; i++)
        {
            if (!dr.Table.Columns[i].ColumnName.StartsWith("_"))
            {
                response.Write(Utils.StripHTML(tab + dr[i].ToString().Replace("\n", " ").Replace("\t", " "))); 
                tab = "\t";
            }
        }
        response.Write("\n");
    }

    response.End();
}
publicstaticvoidexporttocsv(DataTable dt,HttpResponseBase响应,字符串文件名)
{
response.AddHeader(“内容处置”、“附件;文件名=“+filename”);
response.ClearContent();
response.ContentType=“application/vnd.ms excel”;
响应。Charset=“UTF-8”;
response.ContentEncoding=System.Text.Encoding.Unicode;
BinaryWrite(System.Text.Encoding.Unicode.getPremission());
字符串选项卡=”;
foreach(数据列dc在dt.列中)
{
如果(!dc.ColumnName.StartsWith(“”))
{
response.Write(制表符+dc.ColumnName);
tab=“\t”;
}
}
响应。写入(“\n”);
int i;
foreach(数据行dr在dt.行中)
{
tab=“”;
对于(i=0;i
CSV文件是纯文本,其中的值由约定的分隔符(通常是逗号,因此是名称,在您的示例中是制表符)分隔

Excel支持CSV文件,它在单独的列中表示每个值。这只是视觉表示,但文件没有实际列,并且不能包含任何形式的格式


您需要将文件的格式更改为Excel格式,并以这种方式创建它。您可以使用Excel互操作或将其作为Excel XML文件写入。我推荐第二种选择。您可以查看Excel XML的工作示例。

CSV文件只是纯文本,其中的值由约定的分隔符分隔(通常为逗号,因此名称,在您的示例中为制表符)

Excel支持CSV文件,它在单独的列中表示每个值。这只是视觉表示,但文件没有实际列,并且不能包含任何形式的格式


您需要将文件的格式更改为Excel格式,并以这种方式创建它。您可以使用Excel互操作或将其作为Excel XML文件写入。我推荐第二种选择。有关Excel XML的工作示例,您可以查看。

您当前正在创建一个带分隔符的文本文件

由于该文件是普通文本文件,因此不能应用任何格式

您的要求是生成具有格式和一定宽度的excel文件,因此,这只能通过直接生成excel文件来实现

这可以通过互操作或输出所需的xml来实现,但某种excel库可能更容易实现,而不必担心细节。我个人更喜欢。它是一个有用的库,用于创建Excel 2007及以后的Excel电子表格。您可以使用nugget或通过网站下载来安装库

下面简要介绍了如何实现这一点

public static void ExportToCSV(DataTable dt, HttpResponseBase response, string filename)
{
    response.AddHeader("content-disposition", "attachment; filename=" + filename);
    response.ClearContent();
    response.ContentType = "application/vnd.ms-excel";
    response.Charset = "UTF-8";
    response.ContentEncoding = System.Text.Encoding.Unicode;
    response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); 

    ExcelPackage package = new ExcelPackage();
    package.Workbook.Properties.Comments = "Demo Excel Generation";
    package.Workbook.Worksheets.Add("DemoSheet");

    ExcelWorksheet sheet = package.Workbook.Worksheets["DemoSheet"];

    bool altColour = false;
    for (int i = 1; i < 10; i++)
    {
        for (int j = 1; j < 10; j++)
        {
            sheet.Cells[i, j].Value = string.Format("{0} - {1}", i, j);
            sheet.Row(j).Style.Fill.PatternType = ExcelFillStyle.Solid;
            sheet.Row(j).Style.Fill.BackgroundColor.SetColor(altColour ? Color.Gold : Color.Goldenrod);
            altColour = !altColour;
        }

        sheet.Column(i).AutoFit(5f); // Set minimum width to 5 points
    }

    //package.File = new System.IO.FileInfo(@"C:\test.xlsx");
    //package.Save();
    package.SaveAs(response.OutputStream);
    Response.End();
}
publicstaticvoidexporttocsv(DataTable dt,HttpResponseBase响应,字符串文件名)
{
response.AddHeader(“内容处置”、“附件;文件名=“+filename”);
response.ClearContent();
response.ContentType=“application/vnd.ms excel”;
响应。Charset=“UTF-8”;
response.ContentEncoding=System.Text.Encoding.Unicode;
BinaryWrite(System.Text.Encoding.Unicode.getPremission());
ExcelPackage=新的ExcelPackage();
package.Workbook.Properties.Comments=“演示Excel生成”;
文件包。工作簿。工作表。添加(“DemoSheet”);
Excel工作表=package.Workbook.Worksheets[“DemoSheet”];
布尔色=假;
对于(int i=1;i<10;i++)
{
对于(int j=1;j<10;j++)
{
sheet.Cells[i,j].Value=string.Format(“{0}-{1}”,i,j);
sheet.Row(j).Style.Fill.PatternType=ExcelFillStyle.Solid;
表。行(j)。样式。填充。背景色。设置颜色(AltColor?颜色。金色:颜色。黄花);
altcolor=!altcolor;
}
sheet.Column(i).AutoFit(5f);//将最小宽度设置为5点
}
//package.File=new System.IO.FileInfo(@“C:\test.xlsx”);
//package.Save();
package.SaveAs(response.OutputStream);
Response.End();
}

您当前正在创建一个带分隔符的文本文件

由于该文件是普通文本文件,因此不能应用任何格式

您的要求是生成具有格式和一定宽度的excel文件,因此,这只能通过直接生成excel文件来实现

这可以通过互操作或输出所需的xml来实现,但某种excel库可能更容易实现,而不必担心细节。我个人更喜欢。它是一个有用的库,用于创建Excel 2007及以后的Excel电子表格。您可以使用nugget或通过网站下载来安装库

下面简要介绍了如何实现这一点

public static void ExportToCSV(DataTable dt, HttpResponseBase response, string filename)
{
    response.AddHeader("content-disposition", "attachment; filename=" + filename);
    response.ClearContent();
    response.ContentType = "application/vnd.ms-excel";
    response.Charset = "UTF-8";
    response.ContentEncoding = System.Text.Encoding.Unicode;
    response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble()); 

    ExcelPackage package = new ExcelPackage();
    package.Workbook.Properties.Comments = "Demo Excel Generation";
    package.Workbook.Worksheets.Add("DemoSheet");

    ExcelWorksheet sheet = package.Workbook.Worksheets["DemoSheet"];

    bool altColour = false;
    for (int i = 1; i < 10; i++)
    {
        for (int j = 1; j < 10; j++)
        {
            sheet.Cells[i, j].Value = string.Format("{0} - {1}", i, j);
            sheet.Row(j).Style.Fill.PatternType = ExcelFillStyle.Solid;
            sheet.Row(j).Style.Fill.BackgroundColor.SetColor(altColour ? Color.Gold : Color.Goldenrod);
            altColour = !altColour;
        }

        sheet.Column(i).AutoFit(5f); // Set minimum width to 5 points
    }

    //package.File = new System.IO.FileInfo(@"C:\test.xlsx");
    //package.Save();
    package.SaveAs(response.OutputStream);
    Response.End();
}
publicstaticvoidexporttocsv(DataTable dt,HttpResponseBase响应,字符串文件名)
{
response.AddHeader(“内容处置”、“附件;文件名=“+filename”);
response.ClearContent();
response.ContentType=“application/vnd.ms excel”;
响应。Charset=“UTF-8”;
response.ContentEncoding=System.Text.Encoding.Unicode;
BinaryWrite(System.Text.Encoding.Unicode.getPremission());
ExcelPackage=新的ExcelPackage();
package.Workbook.Properties.Comments=“演示Excel生成”;
文件包。工作簿。工作表。添加(“DemoSheet”);
Excel工作表=package.Workbook.Worksheets[“DemoSheet”];