以文本方式查看主题
- 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编辑过]
|