在EPPlus中自动调整行

我找不到使用EPPlus Excel库自动调整行高的方法。 当我使用Excel Interop时,我可以执行sheet.Rows.AutoFit() 。 我正在使用ILSpy浏览界面,但到目前为止我没有发现任何有用的东西。 有一些解决方法,或者我错过了什么吗?

更新 :第4行给我的问题:

在这里输入图像描述

我试图做sheet.Row(4).CustomHeight = false,但它没有工作......我也尝试在加载单元格内容之前和之后设置属性,它仍然是相同的。 它确实将行高调整为不同的值,但这不是一个好的选择。 也许EPPlus在测量弦高方面存在问题? 我知道我确实有很多问题,当我弄乱一些传统的GDI +代码时,我需要测量字符串......


实际上,如果您查看行对象的属性CustomHeight ,您将会看到它默认设置为false。 这意味着Excel将(应该)在打开时自动设置行的高度。 如果您想停止该操作,您可以将其设置为false或手动设置行高度,这会自动将其设置为false

唯一的问题是,如果您依赖于该行的自动修改,那么您无法知道在EPPlus中生成时的高度,因为Excel将决定何时它首次打开该文件。 有点像你不知道列宽将会是什么,如果你使用AutoFitColumn函数。

这表明了财产的逻辑:

[TestMethod]
public void Row_Height_Test()
{
    //http://stackoverflow.com/questions/31496172/autofit-rows-in-epplus
    //Throw in some data
    var datatable = new DataTable("tblData");
    datatable.Columns.AddRange(new[]
    {
        new DataColumn("Col1", typeof (int)),
        new DataColumn("Col2", typeof (int)),
        new DataColumn("Col3", typeof (int))
    });


    for (var i = 0; i < 20; i++)
    {
        var row = datatable.NewRow();
        row[0] = i;
        row[1] = i * 10;
        row[2] = i * 100;
        datatable.Rows.Add(row);
    }

    var existingFile2 = new FileInfo(@"c:temptemp.xlsx");
    if (existingFile2.Exists)
        existingFile2.Delete();

    using (var package = new ExcelPackage(existingFile2))
    {
        //Add the data
        var ws = package.Workbook.Worksheets.Add("Sheet1");
        ws.Cells.LoadFromDataTable(datatable, true);

        //CustomHeight is set to false by default on all rows and giving such a large font 
        //will cause it to autosize to a bigger height by Excel when first opened
        ws.Row(1).Style.Font.Size = 20;

        //Setting the height manually will automatically set CustomHeight to true
        //preventing excel from automatically setting the height
        ws.Row(2).Height = 30;
        ws.Row(2).Style.Font.Size = 20;

        //row 1 height will be around 26 when opened in Excel (but cannot know that now), 
        //row 2 height will be 30 as set above, 
        //row 3 height will be the DefaultHeight (usually 15) of the worksheet since it can fit the default font
        Console.WriteLine("{{{0} : {1}}}", ws.Row(1).Height, ws.Row(1).CustomHeight);
        Console.WriteLine("{{{0} : {1}}}", ws.Row(2).Height, ws.Row(2).CustomHeight);
        Console.WriteLine("{{{0} : {1}}}", ws.Row(3).Height, ws.Row(3).CustomHeight);

        //Save the file
        package.Save();
    }
}

这是控制台日志输出:

{15 : False}
{30 : True}
{15 : False}

Excel渲染输出


另一个麻烦,花了我几个小时才弄清楚:如何在给定的列或行中启用自动换行。 这是我做到的:

(水平和垂直对齐已被设置为“中心”)

      // Increase the height of the header row by .5
      // (The height is already at 2 times the default value)
      wsDT.Row(1).Height *= 1.5;

      // Column index to Notes, Anniversary Month and Day
      //   add "1" since column index is relative to 0
      int colIdx = dt.Columns.IndexOf("Notes") + 1;

      // Set the column width 
      // This is a long text field - so width and word wrap are set
      wsDT.Column(colIdx).Width = 50;
      wsDT.Column(colIdx).Style.WrapText = true;

      // Set width of anniversary month column
      // Purpose here is to wrap header text 
      colIdx = dt.Columns.IndexOf("Lease Anniversary Month") + 1;
      wsDT.Column(colIdx).Width = 15;
      wsDT.Column(colIdx).Style.WrapText = true;

显示包装文本和设置宽度的标题行适当时,“注释”行的内容包装文本

链接地址: http://www.djcxy.com/p/72029.html

上一篇: Autofit rows in EPPlus

下一篇: Implementing Dynamic LINQ querying in MVC5/EF Application?