C# ASP.Net到Excel导出-列宽和交替行着色
我使用以下方法最终创建一个CSV文件,并将该文件作为对客户端请求的响应返回 如何将列宽更改为autofit并对行进行交替着色?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
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”];