Foxtable(狐表)用户栏目专家坐堂 → 怎么控制excel插入下面的列


  共有3663人关注过本帖树形打印复制链接

主题:怎么控制excel插入下面的列

帅哥哟,离线,有人找我吗?
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/5/25 21:16:00 [显示全部帖子]

你是想插入值到Execl?还是从Execl取值到狐表?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/5/25 21:37:00 [显示全部帖子]

Execl无所谓插入空列,也不需要,列就在那里,直接填入数据即可。

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/5/25 22:00:00 [显示全部帖子]

请上传实例,并说明需要的具体的效果

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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")

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/5/28 21:09:00 [显示全部帖子]

直接做个交叉统计

Dim g As New CrossTableBuilder("统计表1", DataTables("日库存表"))
g.HGroups.AddDef("日期", DateGroupEnum.Day, "日")
g.VGroups.AddDef("中文名称")
g.Totals.AddDef("出入库", "出入库")
g.Totals.AddDef("库存数量", "库存数量")
g.Totals.AddDef("装卸费", "装卸费")
g.Totals.AddDef("仓储费", "仓储费")
g.Totals.AddDef("拆箱费", "拆箱费")
g.Totals.AddDef("标签费", "标签费")
g.Build()
MainTable = Tables("统计表1")

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/5/28 21:43:00 [显示全部帖子]


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/5/28 22:52:00 [显示全部帖子]

循环

For Each r As Row In Tables("表A").rows
    For Each c As Col In Tables("表A").Cols
        If c.IsNumeric AndAlso r(c.Name) = 0 Then r(c.Name) = Nothing
    Next
Next

合计类似
Dim express As String
For Each c As Col In Tables("表A").Cols
    If c.IsNumeric AndAlso c.Name.Contains("费")
        express = express & " + isnull(" & c.Name & ",0)"
    End If
Next

DataTables("表A").DataCols.Add("合计",Gettype(Double),express.Trim("+") )

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106132 积分:539771 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/5/29 23:39:00 [显示全部帖子]

用Execlvba逐个单元格导,类似16楼用法



 回到顶部