无法保存到新文件夹和行高、自动换行

经验创意 · 47 次浏览
沉没的白鲸 创建于 4天20小时前

1.44.22

1.无法自动新建文件夹

https://temp.getquicker.net/59771/884d1be5ab2040b883dacc4224e061d9.html 
F:\bc是不存在的文件夹,【Excel文件读写】直接指定新文件夹里面的路径“F:\bc\de.xlsx”,无法保存。
另外【写入文本文件】模块支持直接保存新文件夹,比如“F:\btextc\de.txt”F:\btextc文件夹不存在模块会直接新建文件夹和里面的txt。

 

2.行高、列宽
行高调用NPOI方法
$={worksheet}.GetRow(2).Height = 150*12;

//  150*12设置行序号2的行高为150像素,即数值12等于1像素高,比值固定

在设置后面行{worksheet}.GetRow(10).Height = 1200;时可能会遇到: “解析表达式出错。内部错误:未将对象引用设置到对象的实例。”

这个错误通常是因为在调用 GetRow(10) 时,Excel 工作表的第 10 行尚未初始化。GetRow() 方法返回一个 Row 对象,如果该行不存在,就会抛出 NullReferenceException。要解决这个问题在访问行的 Height 属性之前确保该行已经初始化。例如,可以使用以下代码来避免错误:

// 确保行存在
var row = {worksheet}.GetRow(10);
if (row == null) 
{
    row = {worksheet}.CreateRow(10);  // 如果行不存在,创建它
}
row.Height = 1200;

 

列宽是一些不固定比值的数值范围,大致在28-28.444之间。

像素 标准 最低 最高
1 28 15 42
2 56 43 71
5 142 129 156
10 284 271 298
15 426 413 441
20 568 555 583
25 711 698 725
30 853 840 867
40 1137 1124 1152
50 1422 1409 1436
60 1706 1693 1721
75 2133 2120 2147
80 2275 2262 2289
88 2503 2490 2517
100 2844 2831 2858
120 3413 3400 3427
124 3527 3514 3541
125 3555 3542 3569
150 4266 4253 4281
151 4295 4282 4309
187 5319 5306 5333
200 5688 5675 5703
250 7111 7098 7125
300 8533 8520 8547
400 11377 11364 11392
500 14222 14209 14236
600 17066 17053 17081
700 19911 19898 19925
800 22755 22742 22769
900 25600 25586 25614
1000 28444 28431 28458
1200 34133 34120 34147

以80像素为例,.GetRow(2).Height获取列宽数值2275,而.SetColumnWidth(2, 2262) 或.SetColumnWidth(2, 2289);这之间都是得到80像素的列宽。

 

3.设置单元格格式-文本控制-自动换行(W)
WrapText:true

文档的“textwrap:true”没有描述,试了好像没什么效果。

 

沉没的白鲸 最后更新于 2025/8/2

回复内容
CL 3天22小时前
#1

好,我研究下

CL 3天21小时前
#2

行高列宽,我测试了一下是正常的。 查了下GPT,单位是这样的,不涉及“像素” :

在使用 NPOI(用于 .NET 的 Excel 操作库)时,可以通过以下方式设置行高和列宽:


✅ 设置行高

使用 IRow.Height 属性,单位是 1/20 个点(twips)。例如,如果你想设置行为 20 点(常见的高度),则需要设置为 20 * 20 = 400

示例:

IRow row = sheet.CreateRow(0); // 创建第1行
row.Height = 400; // 设置行高为20点

⚠️ 注意:默认行高大约是 15 点,对应 300


✅ 设置列宽

使用 ISheet.SetColumnWidth(columnIndex, width) 方法。单位是 1/256 个字符宽度。例如,如果你想设置为 20 个字符宽(20 * 256):

示例:

sheet.SetColumnWidth(0, 20 * 256); // 设置第1列宽为20个字符宽

⚠️ 注意:列宽单位和字体有关,是以“0”字符宽度为基准。


🔁 自动列宽(适应内容)

你也可以使用 AutoSizeColumn 方法自动调整列宽(但它需要工作簿支持测量字体):

sheet.AutoSizeColumn(0); // 自动调整第1列的宽度

⚠️ 自动列宽在某些场景(如无 GUI 环境或空值单元格)下可能不准确。


总结

设置内容 方法/属性 单位
行高 row.Height 1/20 点
列宽 sheet.SetColumnWidth(col, width) 1/256 字符宽
自动列宽 sheet.AutoSizeColumn(col) 自动计算

如需设置所有行或列的高度宽度,可以在循环中对所有行/列调用相应方法。

沉没的白鲸 回复 CL 3天21小时前 :

   

好吧,底层的原理是两个不同的长度单位那就不管了。但是实际使用中,我觉得如果能弄清楚 行高、列宽的统一长度单位会在需要固定比例的格子时会有用处。

沉没的白鲸 回复 沉没的白鲸 3天18小时前 :

示例:像素行高列宽 - by 沉没的白鲸 - 动作信息 - Quicker

https://getquicker.net/Sharedaction?code=178f825f-fcf2-4b12-02eb-08ddd118d332

比如放图片的格子,如果能准确设置格子的像素长宽,里面的图片比例会更符合原比例。


沉没的白鲸 最后更新于 3天18小时前
沉没的白鲸 回复 CL 3天21小时前 :

WrapText有效啊,我试过了所以才提出来。问题是目前文档的“textwrap:true”

CL 回复 沉没的白鲸 3天11小时前 :

好,看花眼了🤦‍♂️

回复主贴