Foxtable(狐表)用户栏目专家坐堂 → bs端怎么完成数据下载成为excel 然后又将excel修改后的数据直接导入数据表呢?


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

主题:bs端怎么完成数据下载成为excel 然后又将excel修改后的数据直接导入数据表呢?

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
bs端怎么完成数据下载成为excel 然后又将excel修改后的数据直接导入数据表呢?  发帖心情 Post By:2022/9/29 19:32:00 [只看该作者]

bs端怎么完成数据下载成为excel  然后又将excel修改后的数据直接导入数据表呢?

 

帮助中的代码:

Dim cmd As New SQLCommand
cmd.Conne ctio nName = "数据源名称"

Dim
nms() As String = {"产品","数量","单价","金额","日期"}
cmd
.Comm andText = "Sele ct 产品,数量,单价, 数量 * 单价 As 金额,日期 From {订单} Where 客户 = 'CS01' "
Dim
dt As DataTable = cmd.ExecuteReader()
Dim
Book As New XLS.Book
Dim
Sheet As XLS.Sheet = Book.Sheets(0)
Dim
Style As Xls.Style = Book.NewStyle
Style
.BackColor = Color.Red
For
c As Integer = 0 To nms.Count -1
    Sheet(0, c).Value = nms(c)

Next
For
r As Integer = 0 To dt.DataRows.Count - 1
    For c As Integer = 0 To nms.Count -1
        Sheet(r +1, c).Value = dt.DataRows(r)(nms(c))
   
Next

Next

'
打开工作簿
Book
.Save("c:\reports\test.xls")
Dim
Proc As New Process
Proc
.File = "c:\reports\test.xls"
Proc
.Start()


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


加好友 发短信
等级:超级版主 帖子:112465 积分:572605 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/29 20:17:00 [只看该作者]

下载什么地方的数据?

excel导入和客户端用法没有区别

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)下载什么地方的数据?excel导入和客户...  发帖心情 Post By:2022/9/29 21:47:00 [只看该作者]

前段js代码

({
    button4: {
        text: '{{text}}',
        //系统自动匹配标题
        visible: true,
        disabled: true,
        click: function() { //按钮单击事件
            e.form.showloading("正在导出《文书名表名窗体id对应表》数据,请稍后!");
            $.post("form527_excel1.Ajax", {
                guid: e.form.guid,
            },
            function(res) {
                var a = document.createElement("a");
                a.setAttribute("href", myurl + res);
                a.setAttribute("target", "打印文书");
                document.body.appendChild(a);
                a.click();
                a.remove();
                e.form.closeloading();
            })
        }
    }
})

 

后端导出代码:

Public Sub form527_excel1_Ajax(rq as Request)
 Dim e As RequestEventArgs = rq.e
 Dim cmd As SQL Co mmand = rq.cmd
cmd.CommandText = "sel ect * from 文书名表名窗体id对应表 "
Dim dt As DataTable = cmd.ExecuteReader()
Dim nms() As String = {"措施类别","文书名","文书简称","对应表名","窗体id","文书条款"} '要导出的列名
Dim caps() As String = {"措施类别","文书名","文书简称","对应表名","窗体id","文书条款"} '对应的列标题
Dim szs() As Integer = {100,200,80,200,80,820} '对应的列宽
Dim Book As New XLS.Book '定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表
Dim st As XLS.Style = Book.NewStyle '日期列的显示格式
st.Format = "yyyy-MM-dd"
For c As Integer = 0 To nms.length -1
    Sheet(0, c).Value = caps(c) '指定列标题
    Sheet.Cols(c).Width = szs(c) '指定列宽
    If dt.dataCols(nms(c)).IsDate Then '如果是日期列
        Sheet.Cols(c).Style = st '设置显示格式
    End If
Next
For r As Integer = 0 To dt.dataRows.Count - 1 '填入数据
    For c As Integer = 0 To nms.length -1
        Sheet(r +1, c).Value = dt.datarows(r)(nms(c))
    Next
Next
Book.Save(ProjectPath & "\Reports\文书名表名窗体id对应表.xls")
e.Writestring("\Reports\文书名表名窗体id对应表.xls")
End Sub

 

 

 

现在怎么在页面的导入信息按钮中导入刚刚导出的这个表的数据到数据库表中呢?

 

当前代码:在bs端不能操作,只能在部署服务的服务器端点击才会有操作,怎么变通实现在bs端可以直接就刚刚下载的文件选择后将数据导入到数据库表中呢?

Public Sub form527_excel2_Ajax(rq as Request)
Dim dlg As New OpenFileDialog
dlg.Filter = "excel文件|*.xls"
dlg.MultiSelect = True '允许选择多个文件
If dlg.ShowDialog =DialogResult.OK Then
    For Each fl As String In dlg.FileNames
        DataTables("文书名表名窗体id对应表").DeleteFor("")
        Dim mg As New Merger
        mg.SourcePath = fl
        mg.Format = "excel" '指定格式
        mg.Fields= "措施类别,文书名,文书简称,对应表名,窗体id,文书条款"
        mg.SourceTableName = "sheet1$"
        mg.DataTableName = "文书名表名窗体id对应表"
        mg.Merge()
        DataTables("文书名表名窗体id对应表").save
    Next
End If
End Sub

 

 

 

 

以下是页面中js上传数据到页面表的方法  怎么变通为直接上传到数据库表呢?

({
    button6: {
        text: '{{text}}', //系统自动匹配标题
        visible:false,
        click: function () { //按钮单击事件
         e.form.loadexcel(function(data){
             var rows = data[0];//获取第一个sheet数据
             var bbrows = e.form.table1.rows;
             let newrows = [];
             for(var i in rows){
                 let b  = false;
                // console.log(rows[i].巡察对象)
                  for(var j in bbrows){
                    //  &&表示并且 ||表示或
                    if(rows[i].措施类别 == bbrows[j].措施类别&&rows[i].文书名称 == bbrows[j].文书名称){
                         b = true;
                      }
                  }
                  if(b == false){
                      newrows.push(rows[i])
                  }
             }
            // console.log(newrows)
                 for(var j1 in newrows){
                    console.log(newrows[j1])
                   e.form.table1.addnew(newrows[j1]); 
                 }
             e.form.table1.showrows=[];
             for(var i =0;i<newrows.length-1;i++){
                 e.form.table1.showrows.push(newrows[i]);
             }
         });
        },
        formatExcelDate(numb, format) {
            const time = new Date((numb - 1) * 24 * 3600000 + 1);
            time.setYear(time.getFullYear() - 70);
            time.setHours(time.getHours() - 8);
            const year = time.getFullYear() + '';
            const month = time.getMonth() + 1 + '';
            const date = time.getDate() - 1 + '';
            const hours = time.getHours().toLocaleString();
            const minutes = time.getMinutes();
            if (format && format.length === 1) {
              return year + format + month + format + date + ' ' + hours + ':' + minutes;
            }
            return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date);
      }
    }
})

[此贴子已经被作者于2022/9/29 22:02:09编辑过]

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


加好友 发短信
等级:超级版主 帖子:112465 积分:572605 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/29 22:09:00 [只看该作者]

把接收的数据直接保存到数据库不行吗?为什么一定要先保存到execl,然后再把execl导入数据库?

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)把接收的数据直接保存到数据库不行吗...  发帖心情 Post By:2022/9/29 22:32:00 [只看该作者]

页面正常录入的数据是直接保存到数据库表的

 

但是有些时候需要进行数据批量修改 数据量大  所以需要导出到excel表中  进行修改后  再将这些数据 从excel表中导入到数据库表中

 

导出已经实现了  现在怎么导入呢?

 

麻烦老师指导下  谢谢!


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


加好友 发短信
等级:超级版主 帖子:112465 积分:572605 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/29 22:43:00 [只看该作者]

Public Sub form527_excel2_Ajax(rq as Request)
        DataTables("文书名表名窗体id对应表").DeleteFor("")
        Dim mg As New Merger
        mg.SourcePath = ProjectPath & "\Reports\文书名表名窗体id对应表.xls"
        mg.Format = "excel" '指定格式
        mg.Fields= "措施类别,文书名,文书简称,对应表名,窗体id,文书条款"
        mg.SourceTableName = "sheet1$"
        mg.DataTableName = "文书名表名窗体id对应表"
        mg.Merge()
        DataTables("文书名表名窗体id对应表").save
End Sub

 


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)Public Sub form527_excel2_Ajax(rq ...  发帖心情 Post By:2022/9/29 23:04:00 [只看该作者]

不能这样哦  这样写的话 只能在部署服务器的电脑上可以选择这个文件

实际上这个文件不一定是在服务器端

是在同一个网络下的bs端的任何一个电脑上

 

所以最好是能够直接选择excel文件,然后再导入数据

 

以下是页面中js上传数据到页面表的方法  怎么变通为直接上传到数据库表呢?

({
    button6: {
        text: '{{text}}', //系统自动匹配标题
        visible:false,
        click: function () { //按钮单击事件
         e.form.loadexcel(function(data){
             var rows = data[0];//获取第一个sheet数据
             var bbrows = e.form.table1.rows;
             let newrows = [];
             for(var i in rows){
                 let b  = false;
                // console.log(rows[i].巡察对象)
                  for(var j in bbrows){
                    //  &&表示并且 ||表示或
                    if(rows[i].措施类别 == bbrows[j].措施类别&&rows[i].文书名称 == bbrows[j].文书名称){
                         b = true;
                      }
                  }
                  if(b == false){
                      newrows.push(rows[i])
                  }
             }
            // console.log(newrows)
                 for(var j1 in newrows){
                    console.log(newrows[j1])
                   e.form.table1.addnew(newrows[j1]); 
                 }
             e.form.table1.showrows=[];
             for(var i =0;i<newrows.length-1;i++){
                 e.form.table1.showrows.push(newrows[i]);
             }
         });
        },
        formatExcelDate(numb, format) {
            const time = new Date((numb - 1) * 24 * 3600000 + 1);
            time.setYear(time.getFullYear() - 70);
            time.setHours(time.getHours() - 8);
            const year = time.getFullYear() + '';
            const month = time.getMonth() + 1 + '';
            const date = time.getDate() - 1 + '';
            const hours = time.getHours().toLocaleString();
            const minutes = time.getMinutes();
            if (format && format.length === 1) {
              return year + format + month + format + date + ' ' + hours + ':' + minutes;
            }
            return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date);
      }
    }
})


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


加好友 发短信
等级:超级版主 帖子:112465 积分:572605 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/30 8:43:00 [只看该作者]

那就是普通的文件上传下载呀:http://www.foxtable.com/mobilehelp/topics/0060.htm

前端放一个文件控件,服务端下载后,导入即可


            For Each key As String In e.Files.Keys
                If key = "up1" Then
                    For Each fln As String In e.Files(key)
                        e.SaveFile(key, fln, ProjectPath & "Attachments\" & fln)
        Dim mg As New Merger
        mg.SourcePath = ProjectPath & "Attachments\" & fln
……
                    Next

                End If
            Next

 回到顶部