自动调整列与设置数字格式相结合,将使用未格式化的文本作为测量值进行自动调整

时间:2015-10-09 10:08:16

标签: epplus

当我使用EPPlus自动调整格式化为日期字符串的列时,自动调整机制使用未格式化的字符串作为列的宽度的度量。

这是一个错误还是我做错了什么?

代码

sheet.Column(2).Style.Numberformat.Format = "yyyy-MM-dd hh:mm";
sheet.Cells.AutoFitColumns();

结果:

autofit using date formatting

在excel中扩展第二列

autofit using date formatting then widening datefield column in excel

使用无格式自动调整,请注意第二列的宽度与第一张图片中假定自动调整列的宽度相同。

autofit without formatting

完成后,这是没有使用自动调整时的结果

no autofit

2 个答案:

答案 0 :(得分:1)

可以是您的代码中的字体设置,也可以是excel中的全局字体设置。尝试运行此测试(我将其作为答案发布,因为我无法将其放入评论中):

[TestMethod]
public void Auto_Col_Fomat_Test()
{
    //Throw in some data
    var datatable = new DataTable("tblData");
    datatable.Columns.AddRange(new[]
    {
        new DataColumn("Col1", typeof (int)), new DataColumn("Col2", typeof (DateTime)), new DataColumn("Col3", typeof (object))
    });

    for (var i = 0; i < 10; i++)
    {
        var row = datatable.NewRow();
        row[0] = i; row[1] = DateTime.Now.AddDays(i); row[2] = Path.GetRandomFileName();
        datatable.Rows.Add(row);
    }

    //Create a test file
    var fi = new FileInfo(@"c:\temp\Auto_Col_Fomat.xlsx");
    if (fi.Exists)
        fi.Delete();

    using (var pck = new ExcelPackage(fi))
    {
        var workbook = pck.Workbook;
        var sheet = workbook.Worksheets.Add("Sheet1");
        sheet.Cells.LoadFromDataTable(datatable, true);

        sheet.Column(2).Style.Numberformat.Format = "yyyy-MM-dd hh:mm";
        sheet.Cells.AutoFitColumns();

        pck.Save();
    }
}

如果显示相同的内容,您可能更改了默认的Excel格式或缩放,这意味着您可能需要将代码中的字体设置为Body Font大小为11(至少是2013年使用的)。如果它没有显示你的更多代码。

答案 1 :(得分:0)

我遇到了同样的问题。

这是我的工作:

首先调用AutoFitColumns,然后在具有特殊格式的列中添加一些填充:

  <div class="control-group">
        <div class="controls">
            <label for="foo">Foo</label>   <-- why this did not go?
            <input id="foo" name="foo" type="hidden">
        </div>
    </div>