How to set XLSX cell width with EPPlus?

前端 未结 5 1881
孤城傲影
孤城傲影 2021-01-31 00:47

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 c

5条回答
  •  长情又很酷
    2021-01-31 01:39

    Actual Answer is already marked thats the right way of setting column width but there is one issue that is when document is opened first time in excel, it recalculates columns' width (dont know why) so as i mentioned in comment below the marked answer when i set column width to 7.86 its resets it to 7.14 and 10.43 to 9.7x.

    i found following code from this epp reported issue to get the closet possible column width as desired.

    //get 7.14 in excel
    ws.Column(1).Width = 7.86;
    
    //get 7.86 in excel
    ws.Column(1).Width = GetTrueColumnWidth(7.86);
    
    public static double GetTrueColumnWidth(double width)
            {
                //DEDUCE WHAT THE COLUMN WIDTH WOULD REALLY GET SET TO
                double z = 1d;
                if (width >= (1 + 2 / 3))
                {
                    z = Math.Round((Math.Round(7 * (width - 1 / 256), 0) - 5) / 7, 2);
                }
                else
                {
                    z = Math.Round((Math.Round(12 * (width - 1 / 256), 0) - Math.Round(5 * width, 0)) / 12, 2);
                }
    
                //HOW FAR OFF? (WILL BE LESS THAN 1)
                double errorAmt = width - z;
    
                //CALCULATE WHAT AMOUNT TO TACK ONTO THE ORIGINAL AMOUNT TO RESULT IN THE CLOSEST POSSIBLE SETTING 
                double adj = 0d;
                if (width >= (1 + 2 / 3))
                {
                    adj = (Math.Round(7 * errorAmt - 7 / 256, 0)) / 7;
                }
                else
                {
                    adj = ((Math.Round(12 * errorAmt - 12 / 256, 0)) / 12) + (2 / 12);
                }
    
                //RETURN A SCALED-VALUE THAT SHOULD RESULT IN THE NEAREST POSSIBLE VALUE TO THE TRUE DESIRED SETTING
                if (z > 0)
                {
                    return width + adj;
                }
    
                return 0d;
            }
    

提交回复
热议问题