代码之家  ›  专栏  ›  技术社区  ›  A B

C#Excel自动调整列避免长文本时出错

  •  1
  • A B  · 技术社区  · 4 月前

    我有一个代码,可以将数据导出到excel电子表格,并使用自动调整来调整列宽。这是代码。

    ws.Columns.AutoFit();
    

    问题是在某些情况下,单元格中的信息可能很长,列的宽度超过255,因此我收到了“无法设置Range类的ColumnWidth属性”错误。我只是想知道当你有长文本时,避免这个错误的最佳方法是什么。

    根据其他人建议的字符串长度分配列的宽度不是我想要的。我正在寻找更可靠的方法来处理它。

    2 回复  |  直到 4 月前
        1
  •  1
  •   Xavier J    4 月前

    如果列宽的最大值为255,则将AutoFit方法调用包装在try-catch语句中。如果Autofit在工作表级别不起作用,则在列级别循环。如果列级别出现故障,请将宽度设置为255。

    代码类型:

    try {
        ws.Columns.AutoFit();
    }
    catch {
       //step through each column individually and perform autofit
       foreach(var column in [appropriate range function]){
           try {
               column.AutoFit();
           }
           catch {
               column.Width = 255;
           }
       }
    }
    

    这可能是你能做的最好的了。

        2
  •  1
  •   A B    4 月前

    如果有人需要,这是我的最后一段代码。它还在Autofit之后稍微扩展了列的宽度。

            int i = 1;
            while (i <= ws.UsedRange.Columns.Count)
            {
                try
                {
                    ws.Columns[i].AutoFit();
                    ws.Columns[i].ColumnWidth = ws.Columns[i].ColumnWidth + 5;                 
                }
                catch
                {
                    try
                    {
                        ws.Columns[i].AutoFit();
                        ws.Columns[i].ColumnWidth = ws.Columns[i].ColumnWidth + 5;                     
                    }
                    catch
                    {
                        ws.Columns[i].ColumnWidth = 255;                       
                    }
                }
                i++;
            }