当前位置: 首页 > 知识库问答 >
问题:

NPOI C#将列设置为适合一页

阎善
2023-03-14

我在我的C#应用程序中使用NPOI Version2.5.3,并试图设置缩放选项(适合1页上的所有列)。从这里和这里的这些问题来看,这似乎很容易做到。

问题是:

所以,我的问题发生在使用下面的代码时。所做的就是配置;适合一页的宽度和高度。我以为是因为床单。fittopage=true。

private void SetPrintSettings(XSSFSheet sheet)
{
    sheet.SetMargin(MarginType.BottomMargin, 0.5);
    sheet.SetMargin(MarginType.TopMargin, 0.5);
    sheet.SetMargin(MarginType.LeftMargin, 0.45);
    sheet.SetMargin(MarginType.RightMargin, 0.45);
    sheet.SetMargin(MarginType.HeaderMargin, 0.3);
    sheet.SetMargin(MarginType.FooterMargin, 0.3);

    sheet.Autobreaks = true; //auto breaks
    sheet.FitToPage = true;  //THIS SETS IT TO ALL FIT ON ONE PAGE

    var PrintSetup = sheet.PrintSetup;
    PrintSetup.FitWidth = 1; //fit width onto 1 page
    PrintSetup.FitHeight = 0; //don't care about height
    PrintSetup.Landscape = true;
    PrintSetup.PaperSize = 3; //paper size 11x17
}

 private void SetPrintSettings(XSSFSheet sheet)
 {
    sheet.SetMargin(MarginType.BottomMargin, 0.5);
    sheet.SetMargin(MarginType.TopMargin, 0.5);
    sheet.SetMargin(MarginType.LeftMargin, 0.45);
    sheet.SetMargin(MarginType.RightMargin, 0.45);
    sheet.SetMargin(MarginType.HeaderMargin, 0.3);
    sheet.SetMargin(MarginType.FooterMargin, 0.3);

    sheet.Autobreaks = true; //auto breaks
    sheet.FitToPage = false; 

    var PrintSetup = sheet.PrintSetup;
    PrintSetup.FitWidth = 1; //fit width onto 1 page
    PrintSetup.FitHeight = 0; //don't care about height
    PrintSetup.Landscape = true;
    PrintSetup.PaperSize = 3; //paper size 11x17
}

下面是我正在努力做的事情。只需设置缩放选项,使列适合1页。如果有人能帮我,或者给我指明正确的方向,那将是非常棒的。

共有1个答案

壤驷子安
2023-03-14

看起来这是NPOI中的一个bug。

为了实现上述设置,需要在sheet XML中使用pagesetup元素将FittoHeight属性设置为0。例如:

<pageSetup orientation="landscape" fitToHeight="0"/>

不幸的是,如果我正确地阅读了NPOI代码,那么看起来NPOI没有输出属性,因为它认为它是一个空值。

XmlHelper.WriteAttribute(sw, "fitToHeight", this.fitToHeight, 1);
public static void WriteAttribute(StreamWriter sw, string attributeName, uint value, uint defaultValue, bool writeIfBlank = false)
{
    if(value != defaultValue)
        WriteAttribute(sw, attributeName, (int)value, writeIfBlank);
    else if(writeIfBlank)
        WriteAttribute(sw, attributeName, (int)value, writeIfBlank);
}
public static void WriteAttribute(StreamWriter sw, string attributeName, int value, bool writeIfBlank)
{
    if (value == 0 && !writeIfBlank)
        return;

    WriteAttribute(sw, attributeName, value.ToString(CultureInfo.InvariantCulture));
}

value等于0writeifblank为false,因此,如果为true,那么第一个,则返回被命中,并且没有写出任何值。

 类似资料:
  • 问题内容: 我有第1列和第2列,并希望将它们合并到同一表的第3列中。如果第2列为空,则显示第1列的值;如果第1列为空,则它们显示第2列的数据。如果它们都为空,则显示为空。我尝试了两件事: 1)使用CONCAT 。 仅当两个列都不为null时,它才合并列。否则,它只是将null声明为null。 2)使用(第1栏+第2栏)。 。 没有显示所需的输出。 我正在用Java编写此代码。谢谢 问题答案: us

  • 问题内容: 我正在尝试找到一种将两列合并为一个的方法,但是要保持列中的值“ 0”而不是单词的组合。 这些是我和其他人尝试过的: 有人可以让我知道我做错了吗? 问题答案: 我的猜测是,您使用的是MySQL,其中的运算符会进行加法运算,并将值自动转换为数字。如果值不是以数字开头,则转换后的值为。 所以试试这个: 两种添加空间的方法:

  • 本文向大家介绍mysql read_buffer_size 设置多少合适,包括了mysql read_buffer_size 设置多少合适的使用技巧和注意事项,需要的朋友参考一下 key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections = 458624 K read_buffer_size:是MySQL读入缓冲

  • 问题内容: 我对Oracle Sql有疑问, 如果我有一个8列的名为A的数据: 我可以这样将其转换为表B: 这是将列(周日至周六)合并为一个名为“星期几”的新列 我该怎么办?谢谢! 问题答案: 您可以使用: Oracle安装程序 : 查询 : 输出 :

  • 问题内容: 我正在写一个小脚本来帮助日本假名记忆。我如何将以下列表合并为一个?我尝试如下。 问题答案: 单程:

  • 问题内容: 对于matlpotlib来说我还很陌生,我发现刻度线定位器和标签令人困惑,所以请多多包涵。我发誓我已经搜寻了几个小时。 我有一个这样的数据框“框架”(相关列): 其中,工作日名称是索引,而工作日编号是一列。此框架中没有日期时间对象。 我把这个变成了一个数字。 我需要将x轴用作数值,因为我想稍后添加一个散点图,这对于字符串值是不可能的。 这样可以 所以基本上我希望我的xticks是“ d