以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=28885)

--  作者:wsxdwh
--  发布时间:2013/2/21 16:03:00
--  [求助]

想把表格(多头表格)导出后写入数据,然后再导入时出现问题,表头被导入,且数据没有被导人。

     导出代码:

 

Dim dcb As WinForm.ComboBox = e.Form.Controls("ComboBox2")
Dim tbl As Table = Tables(""& dcb.text &"")
Dim hdr As Integer = tbl.HeaderRows \'获得表头的层数
Dim cnt As Integer
Dim Book As New XLS.Book
Dim Sheet As XLS.Sheet = Book.Sheets(0)
tbl.CreateSheetHeader(Sheet) \'生成表头
For c As Integer = 0 To tbl.Cols.Count - 1
    If tbl.Cols(c).Visible Then
        For r As Integer = 0 To tbl.Rows.Count - 1
            sheet(r + hdr,cnt).value = tbl(r,c)
        Next
        cnt = cnt + 1
    End If
Next
Book.Save("d:\\记录表\\test.xls")
Dim Proc As New Process
Proc.File = "d:\\记录表\\test.xls"
Proc.Start()

导入代码:Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls|2007Excel文件|*.xls" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    MessageBox.Show("你选择的是:" & dlg.FileName,"提示") \'提示用户选择的文件
    Dim drb As WinForm.ComboBox = e.Form.Controls("ComboBox3")
    Dim sx1 As WinForm.ComboBox = e.Form.Controls("ComboBox5")
    Dim csxm1 As WinForm.ComboBox = e.Form.Controls("ComboBox7")
    DataTables(""& drb.text &"").DeleteFor("竞赛名称  like \'*" & sx1.text & "*\' And 参赛项目 like \'*" & csxm1.text & "*\'")
    Dim mg As New Merger
    mg.SourcePath = dlg.FileName
    mg.Format = "excel" \'指定格式
    mg.SourceTableName = "sheet1$"
    mg.DataTableName = ""& drb.text &""
    mg.Merge()
End  If

 

请专家指教!

 


--  作者:wsxdwh
--  发布时间:2013/2/21 16:10:00
--  
图片点击可在新窗口打开查看

--  作者:lin_hailun
--  发布时间:2013/2/21 16:12:00
--  
 合并入狐表的时候是根据excel第一行的名字来合并的,但是这个时候,你的表头的名字和狐表列的名字已经是对不上了,空白是正常的。

 这种情况,你只能是手工导入数据:通过编写代码,一列一列、一行一行地对应地导入。


--  作者:wsxdwh
--  发布时间:2013/2/21 16:13:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:8ldmp$$3d)wpnw3yn7o515.jpg
图片点击可在新窗口打开查看

--  作者:lin_hailun
--  发布时间:2013/2/21 18:09:00
--  
 只能是通过手工编码的方法导入了,因为对于这种多层表头的excel数据,狐表看来是没有操作意义的。
--  作者:狐狸爸爸
--  发布时间:2013/2/21 19:05:00
--  

编码导入,可以解决这个问题:

 

http://www.foxtable.com/help/topics/2334.htm

 

例如表头两行,只需将代码改为:

Dim Book As New XLS.Book("c:\\test\\订单.xls")
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Tables("订单").StopRedraw()
\'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
Dim nms() As String = {"产品","客户","雇员","单价","折扣","数量","日期"}
For n As Integer = 2 To Sheet.Rows.Count -1
    Dim r As Row = Tables("订单").AddNew()
    For m As Integer = 0 To nms.Length - 1
         r(nms(m)) = Sheet(n,m).Value
    Next
Next
Tables("订单").ResumeRedraw()


--  作者:wsxdwh
--  发布时间:2013/2/22 13:31:00
--  

谢谢指教!!

再次请教:

1。能否只导入部分列。

2。目前已有7个不同的记录表需要导出并写入数据后导入,是否需要分别编写代码,有没有更好的方法。

3。在网络状态下加载表后,脱离网络后能否单机运行已加载的外部数据表并写入数据后保存,联网后数据能否直接进入外部数据表。


--  作者:lin_hailun
--  发布时间:2013/2/22 14:04:00
--  
 1、部分列的话,就编入对应的列名就行了。

 2、如果要导入的列的格式和列名一致,就不需要分别编写代码。

 3、不能。如果要做的话,需要添加一个access临时数据库,还需要编写具体的代码去同步数据。

--  作者:wsxdwh
--  发布时间:2013/2/22 14:37:00
--  
谢谢!!!
--  作者:wsxdwh
--  发布时间:2013/2/23 11:43:00
--  

导入数据出现问题,请指教!!!

  代码:

   Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
    dlg.Filter= "Excel文件|*.xls|2007Excel文件|*.xls" \'设置筛选器
    If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
        MessageBox.Show("你选择的是:" & dlg.FileName,"提示") \'提示用户选择的文件
        Dim drb As WinForm.ComboBox = e.Form.Controls("ComboBox3")
        Dim sx1 As WinForm.ComboBox = e.Form.Controls("ComboBox5")
        Dim csxm1 As WinForm.ComboBox = e.Form.Controls("ComboBox7")
        DataTables(""& drb.text &"").DeleteFor("竞赛名称  like \'*" & sx1.text & "*\' And 参赛项目 like \'*" & csxm1.text & "*\'")
       
        If drb.text = "记录表A"  Then
            Dim Book As New XLS.Book(""& dlg.FileName &"")
            Dim Sheet As XLS.Sheet = Book.Sheets(0)
            Tables("记录表A").StopRedraw()
            Dim nms() As String = { "编号","姓名","中小学","学校","场地","成绩分数","成绩输入1","成绩输入2","成绩输入4","成绩输入5","奖项","参赛项目" }
           \'在“成绩分数”之前有一列“成绩时间”为表达式列,被省略

        For n As Integer = 2 To Sheet.Rows.Count -2
                Dim r As Row = Tables("记录表A").AddNew()
                For m As Integer = 0 To nms.Length - 2
                    r(nms(m)) = Sheet(n,m).Value
                Next
            Next
            Tables("记录表A").ResumeRedraw()
        End If
       
       
       
    End  If


图片点击可在新窗口打开查看此主题相关图片如下:wv3j1sy7tpl_nvgc07s}~f.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:未命名.jpg
图片点击可在新窗口打开查看

 

"成绩分数"列及后面所有的列都往后错排了?!!!

[此贴子已经被作者于2013-2-23 11:57:58编辑过]