【问题标题】:import csv file into datagridview with specific column and row in vb.net在 vb.net 中将 csv 文件导入具有特定列和行的 datagridview
【发布时间】:2014-02-13 08:27:06
【问题描述】:

请帮帮我,这是我第一次尝试将 excel 文件导入 vb.net 中的 datagridview。场景是我的excel文件有这么多数据,我只需要将从B列开始的值导入到I列,并且起始行必须在B列中带有单词“START”并在带有单词“结尾”。到目前为止,这是我的代码:

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    OpenFileDialog1.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
    OpenFileDialog1.Filter = "CSV Files (*.csv)|*.csv"

    If OpenFileDialog1.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then

        Try
            Dim fi As New FileInfo(OpenFileDialog1.FileName)
            Dim sConnectionStringz As String = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Text;Data Source=" & fi.DirectoryName
            Dim objConn As New OleDbConnection(sConnectionStringz)
            objConn.Open()
            'DataGridView1.TabIndex = 1
            Dim objCmdSelect As New OleDbCommand("SELECT * FROM " & fi.Name, objConn)
            Dim objAdapter1 As New OleDbDataAdapter
            objAdapter1.SelectCommand = objCmdSelect
            Dim objDataset1 As New DataSet
            objAdapter1.Fill(objDataset1)
            '--objAdapter1.Update(objDataset1) '--updating
            DataGridView1.DataSource = objDataset1.Tables(0).DefaultView

            objConn.Close()
        Finally


        End Try


    End If
End Sub

此代码导入/显示 datagridview 中的所有数据。我已经到处搜索了,但似乎没有什么合适的。还是谢谢..

这是示例文件:

CLIENT-RD/OT HC 8   7   8   10  11  12  10
C-RD/OT 6:00    0   0   0   0   0   0   0
C-RD/OT 7:30    0   0   0   0   0   0   0
C-RD/OT 8:00    0   0   0   0   0   0   0
C-RD/OT 9:00    8   7   8   10  11  12  10
C-RD/OT 10:00   0   0   0   0   0   0   0
C-RD/OT 12:00   0   0   0   0   0   0   0
C-RD/OT 1:30    0   0   0   0   0   0   0

ML      0   0   0   0   0   0   0
VL/SIL  2   4   1   1   1   2   2
SL         1    0   1   1   1   0   0

START                   20-Jan  21-Jan  22-Jan  23-Jan  24-Jan  25-Jan  26-Jan
CEBU                     MON    TUE      WED    THU       FRI       SAT   SUN
Team Edna - Esca                            
Adarayan, Dianne          RD    RD  6:00 AM 6:00 AM 6:00 AM 6:00 AM 1:30 PM
Bacalla, Catherine        VL    VL  RD/OT 7:30  7:30 AM 7:30 AM 7:30 AM RD
Dela Cruz, Mary Ann       6:00 AM   7:30 AM RD  RD  7:30 AM 7:30 AM 6:00 AM
Dumana, John Carlos       1:30 PM   1:30 PM 1:30 PM RD  RD  1:30 PM 1:30 PM
Macabodbod, Evelyn        9:00 AM   9:00 AM 9:00 AM 9:00 AM RD  RD/OT 9:00  9:00 AM
Mariano, Kristine         1:30 PM   RD/OT 1:30  1:30 PM 1:30 PM 1:30 PM RD  7:30 AM
Santiago, Gretchen        RD/OT 7:30    6:00 AM 7:30 AM 7:30 AM 1:30 PM 1:30 PM RD
END

【问题讨论】:

  • 首先,不要做SELECT * 指定您想要的列,即那些与列B 到列I 相关的列。它负责列过滤。对于行,您可能必须预处理 CSV 以将 START 和 END 之间的行移动到加载的新临时文件。 START AND END 是否代表数据范围之类的其他内容?编辑您的帖子以添加一小部分 CSV,因为几乎不可能在没有数据的情况下进行数据分析。
  • 如何在 excel @Plutonix 中选择特定的列
  • 如果这是来自 Excel,为什么不提取并导出您需要的确切 range 而不是在代码中执行呢?此外,这看起来不像 CSV - 没有 C。您可能必须将其作为文本打开并将所需的行提取到临时文件中。
  • 时间表在.xls 类型文件中,我上面显示的数据只是该文件中所有数据的一部分。我的老板不想再提取数据或列/行,而只是想上传 .xls 文件并让系统完成。

标签: vb.net excel datagridview import showdialog


【解决方案1】:

试试这个:

Dim objCmdSelect As New OleDbCommand("SELECT * FROM [Sheet1$B14:I24]", objConn)

假设 B14 是您的 starting ROWI24 是您的最后一列/行记录。

更新:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    OpenFileDialog1.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.Desktop
    OpenFileDialog1.Filter = "CSV Files (*.csv)|*.csv"

    If OpenFileDialog1.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then

        Try
            Dim fi As New FileInfo(OpenFileDialog1.FileName)
            Dim sConnectionStringz As String = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Text;Data Source=" & fi.DirectoryName & ";" & "Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"""
            Dim objConn As New OleDbConnection(sConnectionStringz)
            objConn.Open()

            Dim objAdapter1 As New OleDbDataAdapter("SELECT * FROM [Sheet1$B14:I24]", objConn)

            Dim objDataset1 As New DataSet
            objAdapter1.Fill(objDataset1)

            DataGridView1.DataSource = objDataset1.Tables(0).DefaultView

            objConn.Close()
        Finally


        End Try


    End If
End Sub

【讨论】:

  • 对不起,但我收到此错误:“Microsoft Jet 数据库引擎找不到对象 'Sheet1$B14_I24.txt'。确保对象存在并且正确拼写其名称和路径名。” csv 文件来自 openDialogbox。
  • 请你使用这个... 将 objAdapter1 作为新的 OleDbDataAdapter("SELECT * FROM [Sheet1$B14:I24]", objConn) 跳过 OledbCommand 而是直接使用 OledbDataAdapter 只是一个尝试..
  • @Aljie 请查看我更新的帖子。我在您的连接字符串中添加了一些属性。
  • 感谢您的努力,先生,我使用您的代码并收到此错误消息:“Microsoft Jet 数据库引擎无法打开文件 'C:\Documents and Settings\Administrator\Desktop'。它是已由其他用户独占打开,或者您需要权限才能查看其数据。”
  • 打开任务管理器>服务然后结束处理所有'EXCEL'然后运行你的应用程序。
猜你喜欢
  • 2013-10-30
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
相关资源
最近更新 更多