ClosedXML удалил первую строку
Я использую ClosedXML для экспорта файла Excel. мои проблемы: 1- первая строка удалена 2- ширина столбцов не применяется. Я думаю, что первая строка была удалена, потому что я использую 2 заголовка строки, я пытался решить это, но не сработало. вот мой исходный код:
protected void ExportExcel()
{
String constr = "Password=*****;Persist Security Info=True;User ID=*****;Initial Catalog=*****;Data Source=******;";
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("select ServiceName,Sdate,Dfrom,Dto,Peroid,Activity,Sector,WorkStation,Place,ConNumber,ErrorDes,Solutions from ServiceCrashies where Sdate between '" + Request.Form[FromDate.UniqueID] + "' and '" + Request.Form[ToDate.UniqueID] + "'"))
{
//con.Open();
//int numberofrows = cmd.ExecuteNonQuery();
//System.Diagnostics.Debug.WriteLine("Numberof rows" + numberofrows);
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
try
{
sda.Fill(dt);
using (XLWorkbook wb = new XLWorkbook())
{
var ws = wb.Worksheets.Add(dt, "الأعطال");
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=WeeklyReport.xlsx");
using (MemoryStream MyMemoryStream = new MemoryStream())
{
var rngHeaders = ws.Range("A1:L2");
ws.Rows().AdjustToContents();
ws.Columns().AdjustToContents();
rngHeaders.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
rngHeaders.Style.Font.Bold = true;
rngHeaders.Style.Fill.BackgroundColor = XLColor.OrangeRyb;
rngHeaders.Style.Border.OutsideBorder = XLBorderStyleValues.Thick;
rngHeaders.Style.Border.InsideBorder = XLBorderStyleValues.Thin;
rngHeaders.Cell("A1").Value = "اسم الخدمة";
rngHeaders.Cell("B1").Value = "التاريخ";
rngHeaders.Cell("A2").Value = " ";
rngHeaders.Cell("B2").Value = " ";
rngHeaders.Range("C1:E1").Merge();
rngHeaders.Cell("C1").Value = "وقت الانقطاع";
rngHeaders.Cell("C2").Value = "من";
rngHeaders.Cell("D2").Value = "إلى";
rngHeaders.Cell("E2").Value = "المدة";
rngHeaders.Range("F1:J1").Merge();
rngHeaders.Cell("F1").Value = "الجهةالجهات المتضررة";
rngHeaders.Cell("F2").Value = "النشاط";
rngHeaders.Cell("G2").Value = "القطاع";
rngHeaders.Cell("H2").Value = "منطقة الإعمال";
rngHeaders.Cell("I2").Value = "الموقع/المدينة";
rngHeaders.Cell("J2").Value = "عدد المستفيدين المتأثرين";
rngHeaders.Cell("K1").Value = "وصف المشكلة وأسباب حدوثها";
rngHeaders.Cell("L1").Value = "الحل/الإجراء المتبع";
rngHeaders.Cell("K2").Value = " ";
rngHeaders.Cell("L2").Value = " ";
wb.SaveAs(MyMemoryStream);
MyMemoryStream.WriteTo(Response.OutputStream);
Response.Flush();
Response.End();
}
}
}
catch (SqlException ex) { }
}
}
}
}
}
1 ответ
Решение
- Вы записываете значения в ячейки в строках 1 и 2 после помещения таблицы данных в таблицу. использование
ws.FirstRow().InsertRowsAbove(2);
прежде чем вы определитеrngHeaders
, - использование
ws.Rows().AdjustToContents();
после того, как вы заполнили клетки. ClosedXml должен знать, что находится в ячейках, чтобы настроить их ширину (и вам не нужен второй вызовws.Columns().AdjustToContents();
).