Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set XLSX cell width with EPPlus?

Tags:

c#

.net

epplus

Hello I have this code where i create an xlsx file and i need to pre set the width of the xlsx sheet cells. The actual problem is that when i open the excell i need to double click on the gap between the columns with the mouse in order to unwrap the columns and revieal the data that is hidden. Is there a way to do this programmaticaly with Epplus?

using (ExcelPackage p = new ExcelPackage())             {                 String filepath = "C://StatsYellowPages.csv";                 DataSet ds = ExportCSVFileToDataset(filepath, "tblCustomers", "\t");                 //Here setting some document properties                               p.Workbook.Properties.Title = "StatsYellowPages";                  //Create a sheet                 p.Workbook.Worksheets.Add("Sample WorkSheet");                 ExcelWorksheet ws = p.Workbook.Worksheets[1];                 ws.Name = "StatsYellowPages"; //Setting Sheet's name                  //Merging cells and create a center heading for out table                 ws.Cells[1, 1].Value = "StatsYellowPages";                 ws.Cells[1, 1, 1, ds.Tables[0].Columns.Count].Merge = true;                 ws.Cells[1, 1, 1, ds.Tables[0].Columns.Count].Style.Font.Bold = true;                 ws.Cells[1, 1, 1, ds.Tables[0].Columns.Count].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;                  int colIndex = 1;                 int rowIndex = 2;                  foreach (DataColumn dc in ds.Tables[0].Columns) //Creating Headings                 {                     var cell = ws.Cells[rowIndex, colIndex];                      //Setting the background color of header cells to Gray                     var fill = cell.Style.Fill;                     fill.PatternType = ExcelFillStyle.Solid;                     fill.BackgroundColor.SetColor(Color.Gray);                       //Setting Top/left,right/bottom borders.                     var border = cell.Style.Border;                     border.Bottom.Style = ExcelBorderStyle.Thin;                     border.Top.Style = ExcelBorderStyle.Thin;                     border.Left.Style = ExcelBorderStyle.Thin;                     border.Right.Style = ExcelBorderStyle.Thin;                      //Setting Heading Value in cell                     cell.Value = dc.ColumnName;                      colIndex++;                 }                  foreach (DataRow dr in ds.Tables[0].Rows) // Adding Data into rows                 {                     colIndex = 1;                     rowIndex++;                     foreach (DataColumn dc in ds.Tables[0].Columns)                     {                         var cell = ws.Cells[rowIndex, colIndex];                         //Setting Value in cell                         cell.Value = dr[dc.ColumnName].ToString();                         //Setting borders of cell                         var border = cell.Style.Border;                                               colIndex++;                     }                 }                   //Generate A File with Random name                 Byte[] bin = p.GetAsByteArray();                 string file = "c:\\StatsYellowPages.xlsx";                 File.WriteAllBytes(file, bin); 
like image 964
themhz Avatar asked Feb 01 '12 12:02

themhz


People also ask

Does EPPlus require Excel?

No, it does not require Excel to be installed on the server, as you can read in the docs: EPPlus is a . NET library that reads and writes Excel files using the Office Open XML format (xlsx). EPPlus has no dependencies other than .

How do I merge cells in EPPlus?

If you want to merge cells dynamically, you can also use: worksheet. Cells[FromRow, FromColumn, ToRow, ToColumn].


1 Answers

I find that setting the column widths after I have filled in all the data on the sheet works:

ws.Column(1).Width = 50; 

There is also the autoFitColumns method but this ignores cells with formulas and wrapped text so it did not work for me.

ws.Cells["A1:K20"].AutoFitColumns(); 
like image 155
aoifeL Avatar answered Oct 21 '22 02:10

aoifeL