以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  Import方式导入excel表,怎么限制非文本内容的空白列导入呢?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=173210)

--  作者:cnsjroom
--  发布时间:2021/11/19 0:17:00
--  Import方式导入excel表,怎么限制非文本内容的空白列导入呢?
Import方式导入excel表,怎么限制非文本内容的空白列导入呢?

使用过程中遇到当前excel表中只有10列  ,结果导入的时候会提示不能超过225?甚至获取到的第一行列名都大于225的  实际列只有10列,怎么增加判断呢?


Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
dlg.Filter= "Excel97文件|*.xls|Excel2007文件|*.xlsx" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
    Dim ip As New Importer
    ip.SourcePath = dlg.FileName \'指定数据文件\\
    Dim Str1 As String = FileSys.GetName(dlg.FileName)  \'从文件路劲中获取文件名称
    Dim book As new XLS.Book(dlg.FileName)

Dim c6 As WinForm.ComboBox = e.Form.Controls("ComboBox6")
Dim a1 As Integer = c6.Value
    \' MessageBox.Show(book.Sheets(0).name)
    ip.SourceTableName = book.Sheets(a1).name \'指定要导入的表
    ip.NewTableName =book.Sheets(a1).name  \'s \'导入后的表名
    If Str1 > "" AndAlso Str1.Contains("xlsx") Then
        \' MessageBox.Show("xlsx文件")
        ip.Format="Excel2007"
    Else If Str1 > "" AndAlso Str1.Contains("xls") Then
        \' MessageBox.Show("xls文件")
        ip.Format="Excel"
    End If
    \' MessageBox.Show("1")
    ip.Import()

End If

--  作者:有点蓝
--  发布时间:2021/11/19 8:20:00
--  
Importer没有办法判断,这个是execl文件本身的问题,看起来这些列没有内容,实际上都用到了,应该是生成这个文件的程序导出功能有问题

然后使用这种方式合并:http://www.foxtable.com/webhelp/topics/2334.htm

--  作者:cnsjroom
--  发布时间:2021/11/19 15:15:00
--  回复:(有点蓝)Importer没有办法判断,这个是execl文...
图片点击可在新窗口打开查看
图片点击可在新窗口打开查看
如此这样  老师有没有什么办法解决呢?

在选择需要导入的数据表名之后的代码
If e.sender.value = ""  Then
    Return
End If
Dim r As Row
Dim dc As Col
Dim dt As Table = Tables(Vars("btname11"))
Dim t As Table = e.Form.Controls("Table1").Table
Dim i As Integer
Dim nms As String
Dim nms1 As String
Dim cnt As Integer = DataTables(Vars("btname11")).DataCols.Count


Dim Book As New XLS.Book(e.Form.Controls("TextBox1").value)
Dim Sheet As XLS.Sheet = Book.Sheets(e.sender.value)
t.StopRedraw
t.DataTable.DataRows.clear
Dim zd1 As New Dictionary(Of Integer, String)
For i = 0 To Sheet.Cols.count - 1
    r = t.AddNew()
    r("来源字段") = Sheet(0,i).Value
    r("来源列数")=i
    zd1.Add(r("来源列数"),r("来源字段"))
Next
For Each dc In dt.cols
    nms = nms & "|" & dc.name
    t.cols("接收字段").ComboList = nms
Next
For i1 As Integer = 0 To cnt - 1
    nms1 = nms1 & "|" & i1
    t.cols("接收列数").ComboList =nms1 & "|"
Next
t.cols("是否唯一").ComboList ="是" & "|" & "不是"
t.ResumeRedraw
[此贴子已经被作者于2021/11/19 15:16:35编辑过]

--  作者:有点蓝
--  发布时间:2021/11/19 15:20:00
--  
For i = 0 To Sheet.Cols.count - 1
if Sheet(0,i).text > ""
    r = t.AddNew()
    r("来源字段") = Sheet(0,i).Value
    r("来源列数")=i
    zd1.Add(r("来源列数"),r("来源字段"))
end if
Next