gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:35:15 26 4
gpt4 key购买 nike

我在我的 C# 应用程序中使用 NPOI 版本 2.5.3 并尝试设置缩放选项( 适合所有列在 1 页 )。从这些问题中,这似乎很容易做到herehere .
问题:
因此,使用下面的代码时会出现我的问题。所做的只是配置;适合一页的宽度和高度。我认为这是因为 sheet.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
}
执行上面的代码时,我在 Excel 中得到以下输出。
enter image description here
所以在那之后没有工作,我尝试将其设置为 false ,如下所示。
 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
}
当更改配置时,它呈现“无缩放”,如下所示。
enter image description here
无论我尝试什么,我似乎都无法让它发挥作用。我尝试了各种设置,但似乎没有任何效果。我开始认为这是我使用的版本的错误。我发现的几乎所有示例都是针对 Java POI 的,所以我不确定这是否只是方法问题,这无济于事。
所需输出:
以下是我正在尝试做的事情。只需将缩放选项设置为使列适合 1 页。如果有人可以帮助我或为我指明正确的方向,那就太棒了。
enter image description here

最佳答案

看起来这是 NPOI 中的一个错误。
为了实现您的设置,您需要PageSetup表单 XML 中的元素具有 fitToHeight属性设置为 0。例如:

<pageSetup orientation="landscape" fitToHeight="0"/>
不幸的是,如果我正确阅读了 NPOI 代码,看起来 NPOI 没有输出属性,因为它认为它是一个空白值。
当您拨打 PrintSetup.FitHeight = 0;它设置了 fitToHeight房产在 Sheet.cs .写入文件时,在 Sheet.cs有以下几点:
XmlHelper.WriteAttribute(sw, "fitToHeight", this.fitToHeight, 1);
WriteAttribute 代码如下所示:
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);
}
value (0) 不等于 defaultValue (1) 在我们的例子中,我们输入第一个 if .这调用了 WriteAttribute 的另一个重载看起来像这样:
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是假的,所以,第一个 if是真的,因此 return;被命中并且没有写出任何值。

关于c# - NPOI C# 将列设置为适合一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67926647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com