创建与一个单元格的值一样多的行<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我真的不知道如何对这个问题进行分类;
我通过excel从SQL Server下载数据,并在每次创建行时作为SQL的逻辑。在这种情况下,场合是住宿,它由“RoomNight”测量。因此“RoomNight”应该包含“1”的值,如果住宿是300晚,则意味着预订应该有300行;

但是,我们的预订管理员有时会犯错,50晚住宿的结果如下;

我要做的是为每50个值单元格创建50行,其中“RoomNight”的值为“1”,“AdultNight”的值为“2”。
可能吗?
Re:创建与一个单元格的值一样多的行尝试以下,它是基于气泡图 - 不等的时间间隔
这将只乘以高于1的夜晚。
新表(“RoomNight”,
添加行(15),
新栏目(“原始行顺序”,
数字,
连续,
格式(“最佳”,12),
设定值([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
)
新栏目(“RoomNight”,
数字,
连续,
格式(“最佳”,12),
设定值([1,5,10,15,20,25,30,35,40,45,50,55,60,65,70])
)
新栏目(“AdultNight”,
数字,
连续,
格式(“最佳”,12),
设定值([2,10,20,30,40,50,60,70,80,90,100,110,120,130,140])
)
);
//在做任何事情之前记录夜晚和成人的数量
总共晚数= Col Sum(:RoomNight);
成人总夜数= Col Sum(:AdultNight);
dt =当前数据表();
rowN = N Row();
//对于每个原始行,生成与每个事件的持续时间一样多的新行。
对于(i = 1,i <= rowN,i ++,
rowi = dt << get row(i);
对于(z = 1,z <=(:名称(“RoomNight”)) - 1),z ++,
dt << add row(rowi);
dt <<运行公式;
);
);
//将观察结果排序为原始顺序
数据表(“RoomNight”)<< Sort(By(:Original Row order),Order(Ascending),replace table);
//骑了错误的夜晚
:RoomNight <<设置每个值(1);
:AdultNight <<设置每个值(2);
等等(0);
//记录新表中的总晚数
总晚数= Col Sum(:RoomNight);
总成人住宿后= Col Sum(:AdultNight);
//看到所有总数没有变化
显示(预先入住的总房晚数,预订的成人总数,晚上的总房晚数,成人后的晚上总数);
Re:创建与一个单元格的值一样多的行像所有编程一样,它实际上只是一系列步骤。
但是你当然不必(完全)理解能够有效地使用它的东西,所以我做了改变以做我认为你想要的。
执行“文件>新建>新脚本”以打开编辑器窗口,并将下面的代码剪切并粘贴到此窗口中。然后执行'编辑>运行脚本'以使用提供的简单示例检查我是否正确理解(每次运行时都会有所不同)。
如果要使用自己的数据运行它,请确保此表处于活动状态。然后修改以下代码,如下所示:
- 将'//(1):'和'//(2)'之后的代码替换为单行:dt1 = CurrentDataTable();
- 更改'//(3)'后面的行中的'3'和'4',以反映您自己的表中列的位置。
此代码仅在表包含数字列时才有效(如您所示)。
如果这是你(或其他人)想要经常做的事情,那么制作一个加载项来隐藏这种复杂性只是一点点工作。
我对其他人可能提供的解决方案非常感兴趣。正如英语中所说的那样,“有许多方法可以给猫皮肤”。。。
NamesDefaultToHere ( 1 ) ;
//给定一个行ve3ctor'inVec',形成一个矩阵,该矩阵由inVec与其自身'inVec [1,pos]'垂直连接组成
//给出矩阵'outMat'的时间。'outMat'中的'pos'列由1组成。outMat中的列'numPos'将包含
//'inVec [1,numPos]'的值在行之间平均分配
extrudeRow =
功能 ({ inVec , POS , numPos } , { 默认本地 } ,
如果 ( POS > 0 ,
//'pos'是有效的位置吗?
时 = 回合 ( inVec [ 1 , POS ] , 0 ) ;
如果 ( 时 > 0 ,
//挤压矢量
outMat = Ĵ ( 时 , NCOL ( inVec ) , 。 ) ;
对于 ( [R = 1 , [R <= 时 , [R ++,
outMat [ [R , 0 ] = inVec ;
) ;
outMat [ 0 , POS ] = 1 ;
outMat [ 0 , numPos ] = inVec [ 1 , numPos ] / 时 ,
//别的什么都不做
outMat = inVec ;
) ,
//别的什么都不做
outMat = inVec ;
) ;
//返回结果
outMat ;
) ;
//使用'extrudeRow()'通过垂直连接挤出整个矩阵
extrudeTable =
功能 ({ inMat , POS , numPos } , { 默认本地 } ,
如果 ( POS > 0 ,
//挤出矩阵
newRows = 和 ( inMat [ 0 , POS ]) ;
outMat = Ĵ ( newRows , NCOL ( inMat ) , 。 ) ;
RSTART = 1 ;
对于 ( [R = 1 , [R <= NRow ( inMat ) , [R ++,
outMat [ RSTART :: ( RSTART + inMat [ [R , POS ] - 1 ) , 0 ] = extrudeRow ( inMat [ [R , 0 ] , POS , numPos ) ;
RSTART = RSTART + inMat [ [R , POS ] ;
) ,
//别的什么都不做
outMat = inMat ;
) ;
//返回结果
outMat ;
) ;
//显示'extrudeTable()'的用法。。。
//(1):制作一张表来玩
DT1 = newtable的 ( “数据” ,
NewColumn ( “第1栏” ,数字 ,序数词 ,式 ( RandomInteger ( - 五 ,五 ))) ,
NewColumn ( “第2栏” ,数字 ,序数词 ,式 ( RandomInteger ( - 五 ,五 ))) ,
NewColumn ( “频率” ,数字 ,序数词 ,式 ( RandomInteger ( 1 ,五 ))) ,
NewColumn ( “数” ,数字 ,序数词 ,式 ( RandomInteger ( 1 , 20 ))) ,
AddRows ( 五 )
) ;
//(2):将数据作为矩阵获取
MAT1 = DT1 << getAsMatrix ;
//(3):使用'Frequency'(第三个)列挤出此矩阵并平均'Count'(第四个)列的值
MAT2 = extrudeTable ( MAT1 , 3 , 4 ) ;
//(4):从mat2创建一个表并修复列名,使它们与dt1匹配
DT2 = 非稳态 ( MAT2 ) ;
DT2 << 的setName (( DT1 << 的getName ) || “被'频率'挤压” ) ;
COLS = DT1 << getColumnNames ( “串” ) ;
对于 ( C = 1 , C <= NITEMS ( COLS ) , C ++,柱 ( DT2 , C ) << 的setName ( COLS [ C ])) ;
Re:创建与一个单元格的值一样多的行谢谢伊恩,
对于我的初学者技能来说,这是一门火箭科学。
Re:创建与一个单元格的值一样多的行这个旧代码几乎可以满足您的需求,如果您了解一点JSL,可以很容易地适应您的特殊情况。
NamesDefaultToHere ( 1 ) ;
//给定一个行ve3ctor'inVec',形成一个矩阵,该矩阵由inVec与其自身'inVec [1,pos]'垂直连接组成
//给出矩阵'outMat'的时间。'outMat'中的'pos'列由1组成。
extrudeRow =
功能 ({ inVec , POS } , { 默认本地 } ,
如果 ( POS > 0 ,
//'pos'是有效的位置吗?
时 = 回合 ( inVec [ 1 , POS ] , 0 ) ;
如果 ( 时 > 0 ,
//挤压矢量
outMat = Ĵ ( 时 , NCOL ( inVec ) , 。 ) ;
对于 ( [R = 1 , [R <= 时 , [R ++,
outMat [ [R , 0 ] = inVec ;
) ;
outMat [ 0 , POS ] = 1 ,
//别的什么都不做
outMat = inVec ;
) ,
//别的什么都不做
outMat = inVec ;
) ;
//返回结果
outMat ;
) ;
//使用'extrudeRow()'通过垂直连接挤出整个矩阵
extrudeTable =
功能 ({ inMat , POS } , { 默认本地 } ,
如果 ( POS > 0 ,
//挤出矩阵
newRows = 和 ( inMat [ 0 , POS ]) ;
outMat = Ĵ ( newRows , NCOL ( inMat ) , 。 ) ;
RSTART = 1 ;
对于 ( [R = 1 , [R <= NRow ( inMat ) , [R ++,
outMat [ RSTART :: ( RSTART + inMat [ [R , POS ] - 1 ) , 0 ] = extrudeRow ( inMat [ [R , 0 ] , POS ) ;
RSTART = RSTART + inMat [ [R , POS ] ;
) ,
//别的什么都不做
outMat = inMat ;
) ;
//返回结果
outMat ;
) ;
//显示'extrudeTable()'的用法。。。
//(1):制作一张表来玩
DT1 = newtable的 ( “数据” ,
NewColumn ( “第1栏” ,数字 ,序数词 ,式 ( RandomInteger ( - 五 ,五 ))) ,
NewColumn ( “第2栏” ,数字 ,序数词 ,式 ( RandomInteger ( - 五 ,五 ))) ,
NewColumn ( “频率” ,数字 ,序数词 ,式 ( RandomInteger ( 1 ,五 ))) ,
AddRows ( 五 )
) ;
//(2):将数据作为矩阵获取
MAT1 = DT1 << getAsMatrix ;
//(3):使用“频率”(第三个)列挤出此矩阵
MAT2 = extrudeTable ( MAT1 , 3 ) ;
//(4):从mat2创建一个表并修复列名,使它们与dt1匹配
DT2 = 非稳态 ( MAT2 ) ;
DT2 << 的setName (( DT1 << 的getName ) || “被'频率'挤压” ) ;
COLS = DT1 << getColumnNames ( “串” ) ;
对于 ( C = 1 , C <= NITEMS ( COLS ) , C ++,柱 ( DT2 , C ) << 的setName ( COLS [ C ])) ;