以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  怎么控制excel插入下面的列  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=119498)

--  作者:xxfoxtable
--  发布时间:2018/5/25 20:38:00
--  怎么控制excel插入下面的列

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看
一次插入画红框那样的四列,foxtable怎么写代码

--  作者:有点蓝
--  发布时间:2018/5/25 20:53:00
--  
参考:http://www.foxtable.com/webhelp/scr/2334.htm

每四列做一个循环

For n As Integer = 1 To Sheet.Rows.Count -1
    For m As Integer = 0 To 2
        Dim r As Row = Tables("订单").AddNew()
        r("第一列") = Sheet(n,0+m*4).Value
        r("第二列") = Sheet(n,1+m*4).Value
        r("第三列") = Sheet(n,2+m*4).Value
        r("第四列") = Sheet(n,3+m*4).Value
    Next
Next

--  作者:xxfoxtable
--  发布时间:2018/5/25 21:09:00
--  
我是想插入空列,然后再往里写值,插入空列原因是最右有列合计,不能破坏公式
--  作者:有点蓝
--  发布时间:2018/5/25 21:16:00
--  
你是想插入值到Execl?还是从Execl取值到狐表?
--  作者:xxfoxtable
--  发布时间:2018/5/25 21:20:00
--  
先插入空列,表头合并单元格,再一个单元格一个单元格填数,报表太复杂,没有好办法生成
[此贴子已经被作者于2018/5/25 21:28:24编辑过]

--  作者:有点蓝
--  发布时间:2018/5/25 21:37:00
--  
Execl无所谓插入空列,也不需要,列就在那里,直接填入数据即可。

先在模板第13列直接设置公式即可

--  作者:xxfoxtable
--  发布时间:2018/5/25 21:40:00
--  
四个列就是一个产品,产品有多少不固定,最右面是列合计,如果不插入,就会破坏最右面的公式,最右面公式部分我没有截图
--  作者:有点蓝
--  发布时间:2018/5/25 22:00:00
--  
请上传实例,并说明需要的具体的效果
--  作者:xxfoxtable
--  发布时间:2018/5/25 22:37:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:项目1.rar
这是示例,但每个月的产品数量是不固定的,excel为表样
[此贴子已经被作者于2018/5/25 22:37:13编辑过]

--  作者:有点蓝
--  发布时间:2018/5/25 23:45:00
--  
只保留日期列,其它全部用代码生成,例如:

Dim Book As New XLS.Book("D:\\问题\\项目1\\Book1.xlsx") \'定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表
Dim dict As new Dictionary(of String,Integer)
Dim lst As List(Of String) = DataTables("表B").GetValues("产品名称")
Dim zimu As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim i As Integer = 0
Dim idx As Integer
Dim Formula As String = "="
Dim k As Integer
Dim km As Integer
For i = 0 To lst.Count - 1
    idx = i*4+1
    k = Math.Floor((idx+2) / 26) - 1
    km = (idx+2) Mod 26
    \'Output.Show("k=" & k & ", km=" & km)
    If k< 0 Then
        Formula &=  zimu(km) & "{0}+"
    Else
        Formula &= zimu(k) & zimu(km) & "{0}+"
    End If
    
    k = Math.Floor((idx+3) / 26) - 1
    km = (idx+3) Mod 26
    If k< 0 Then
        Formula &=  zimu(km) & "{0}+"
    Else
        Formula &= zimu(k) & zimu(km) & "{0}+"
    End If
    dict.Add(lst(i),idx)
    Sheet(0,idx).Value = lst(i)
    Sheet(1,idx).Value = "出入库"
    Sheet(1,idx+1).Value = "库存"
    Sheet(1,idx+2).Value = "装卸费"
    Sheet(1,idx+3).Value = "堆存费"
    Sheet.MergeCell(0,idx,1,4)
Next

idx = i*4+1
k = Math.Floor(idx / 26) - 1
km = idx Mod 26
If k< 0 Then
    Formula &=  zimu(km) & "{0}+"
Else
    Formula &= zimu(k) & zimu(km) & "{0}+"
End If
k = Math.Floor((idx+1) / 26) - 1
km = (idx+1) Mod 26
If k< 0 Then
    Formula &=  zimu(km) & "{0}+"
Else
    Formula &= zimu(k) & zimu(km) & "{0}+"
End If
k = Math.Floor((idx+2) / 26) - 1
km = (idx+2) Mod 26
If k< 0 Then
    Formula &=  zimu(km) & "{0}+"
Else
    Formula &= zimu(k) & zimu(km) & "{0}+"
End If
Sheet(0,idx).Value = "掏装箱操作费"
Sheet.MergeCell(0,idx,2,1)
Sheet(0,idx+1).Value = "换标签"
Sheet.MergeCell(0,idx+1,2,1)
Sheet(0,idx+2).Value = "托盘费"
Sheet.MergeCell(0,idx+2,2,1)
Sheet(0,idx+3).Value = "仓储合计"
Sheet.MergeCell(0,idx+3,2,1)
Tables("表B").Sort = "日期"
Dim idx2 = 2
Formula = Formula.TrimEnd("+")
Output.Show(Formula)
For Each r As Row In Tables("表B").Rows
    Sheet(idx2,0).Value = r("日期")
    Dim j As Integer = dict(r("产品名称"))

    Sheet(idx2,j).Value = IIF(r("摘要") = "入库",r("数量"),-1*r("数量"))
    \'Sheet(idx,j+1).Value = r("库存")
    Sheet(idx2,j+1).Value = r("装卸费")
    \'Sheet(idx,j+1).Value = r("堆存费单价")*
    
    Sheet(idx2,idx).Value = r("掏装箱操作费")
    Sheet(idx2,idx+1).Value = r("换标签")
    Sheet(idx2,idx+2).Value = r("托盘费")

    Sheet(idx2,idx+3).Formula = Cexp(Formula,idx2+1)
    idx2 += 1
Next

Book.Save("D:\\问题\\项目1\\Book2.xlsx")