如何在 C# 中生成一个 Excel 字母向下旋转 header 90 度的文件?
How can I generate an Excel file with a 90 degree letter rotated down header in C#?
我正在开发一个人力资源应用程序,它需要显示一个工作环境 excel 报告,就像在这个 image.
中展示的那样
现在我正在寻求有关此主题的帮助,我正在使用 ClosedXML.Excel
,目前我正在使用我自己创建的方法生成 Excel 文件,它输入 [=29] 的列表=] 并在 http 请求的响应中创建一个 excel 文件。这是代码:
public static bool ConvertToExcel<T>(IList<T> data, string excelName, string sheetName)
{
PropertyDescriptorCollection properties =
TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name.Replace("_"," "), Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name.Replace("_", " ")] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
try
{
using (XLWorkbook wb = new XLWorkbook())
{
wb.Worksheets.Add(table, sheetName);
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.Buffer = true;
System.Web.HttpContext.Current.Response.Charset = "";
string FileName = excelName + ".xlsx";
System.Web.HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + FileName);
using (MemoryStream MyMemoryStream = new MemoryStream())
{
wb.SaveAs(MyMemoryStream);
MyMemoryStream.WriteTo(System.Web.HttpContext.Current.Response.OutputStream);
System.Web.HttpContext.Current.Response.Flush();
System.Web.HttpContext.Current.Response.End();
}
}
}
catch (Exception e)
{
throw e;
return false;
}
return true;
}
因为boss的名字很长所以扩展了很多excel栏的一个简单的百分比,我想知道我是否可以实现向下旋转(90度)[=的字母28=]。可以用我当前的库 ClosedXML.Excel
实现吗?我想用同样的方法生成这份工作环境报告。
预先致谢:)
您可以使用对齐文本旋转样式来做到这一点:
cell.Style.Alignment.SetTextRotation(90);
谢谢@Raidri。
我修改了代码:
wb.Worksheets.Add(table, sheetName);
至:
var ws = wb.Worksheets.Add(table, sheetName);
ws.Row(1).Style.Alignment.SetTextRotation(180);
ws.Tables.FirstOrDefault().ShowAutoFilter = false;
这样文本向下旋转 90 度,我删除了过滤器。
我正在开发一个人力资源应用程序,它需要显示一个工作环境 excel 报告,就像在这个 image.
中展示的那样现在我正在寻求有关此主题的帮助,我正在使用 ClosedXML.Excel
,目前我正在使用我自己创建的方法生成 Excel 文件,它输入 [=29] 的列表=] 并在 http 请求的响应中创建一个 excel 文件。这是代码:
public static bool ConvertToExcel<T>(IList<T> data, string excelName, string sheetName)
{
PropertyDescriptorCollection properties =
TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name.Replace("_"," "), Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name.Replace("_", " ")] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
try
{
using (XLWorkbook wb = new XLWorkbook())
{
wb.Worksheets.Add(table, sheetName);
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.Buffer = true;
System.Web.HttpContext.Current.Response.Charset = "";
string FileName = excelName + ".xlsx";
System.Web.HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + FileName);
using (MemoryStream MyMemoryStream = new MemoryStream())
{
wb.SaveAs(MyMemoryStream);
MyMemoryStream.WriteTo(System.Web.HttpContext.Current.Response.OutputStream);
System.Web.HttpContext.Current.Response.Flush();
System.Web.HttpContext.Current.Response.End();
}
}
}
catch (Exception e)
{
throw e;
return false;
}
return true;
}
因为boss的名字很长所以扩展了很多excel栏的一个简单的百分比,我想知道我是否可以实现向下旋转(90度)[=的字母28=]。可以用我当前的库 ClosedXML.Excel
实现吗?我想用同样的方法生成这份工作环境报告。
预先致谢:)
您可以使用对齐文本旋转样式来做到这一点:
cell.Style.Alignment.SetTextRotation(90);
谢谢@Raidri。
我修改了代码:
wb.Worksheets.Add(table, sheetName);
至:
var ws = wb.Worksheets.Add(table, sheetName);
ws.Row(1).Style.Alignment.SetTextRotation(180);
ws.Tables.FirstOrDefault().ShowAutoFilter = false;
这样文本向下旋转 90 度,我删除了过滤器。