Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Экспорт данных Excel-Access (с кодом, VB.net) Добавлено: 19.05.10 17:34  

Автор вопроса:  Alba
Подскажите мне пожалуйста что я делаю не так и что я не доделываю для того чтобы процедура экспорта из Excel в Access (поячеечно) проходила должным образом.

Ответить

  Ответы Всего ответов: 26  

Номер ответа: 1
Автор ответа:
 Alba



Вопросов: 8
Ответов: 37
 Профиль | | #1 Добавлено: 19.05.10 17:34
  1.  
  2. Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
  3.   
  4.     Dim oExcel As Excel.Application
  5.     Dim oCon As OleDbConnection
  6.     Dim oCommand As OleDbCommand
  7.     Dim oRS As ADODB.Recordset
  8.     
  9.     oExcel = New Excel.Application
  10.     oCon = New OleDbConnection
  11.     oCommand = New OleDbCommand
  12.     
  13.     Dim izv_id
  14.     Dim izv_date
  15.     Dim fil_name
  16.     Dim o_name
  17.     Dim ob_name
  18.     Dim vozn_time
  19.     Dim ystr_time
  20.     Dim vozn_date
  21.     Dim ystr_date
  22.     Dim obor_type
  23.     Dim obor_mark
  24.     Dim proizv
  25.     Dim zav_num
  26.     Dim vip_date
  27.     Dim vv_date
  28.     Dim inv_num
  29.     Dim yst_site
  30.     Dim tempr
  31.     Dim TO_date
  32.     Dim prot_num
  33.     Dim neisp_desc
  34.     Dim ystr_met
  35.     Dim posl
  36.     Dim prich
  37.     Dim povt_izv_date
  38.     Dim predl_pov_nad
  39.     Dim pril
  40.     Dim pers
  41.  
  42.     oExcel.Visible = True
  43.     Dim FileName As Boolean = True
  44.     If IsPostBack = True And FileUpload1.HasFile = True Then
  45.         Dim m_filePath As String = "C:\" & FileUpload1.FileName
  46.         FileUpload1.PostedFile.SaveAs(m_filePath)
  47.         oExcel.Workbooks.Open(m_filePath)
  48.     End If
  49.  
  50.     izv_id = oExcel.Cells(2, 3)
  51.     izv_date = oExcel.Cells(2, 5) & "." & oExcel.Cells(2, 6) & "." & oExcel.Cells(2, 7)
  52.     fil_name = oExcel.Cells(6, 2)
  53.     o_name = oExcel.Cells(8, 2)
  54.     ob_name = oExcel.Cells(15, 2)
  55.     vozn_time = oExcel.Cells(10, 4) & "." & oExcel.Cells(10, 5)
  56.     ystr_time = oExcel.Cells(12, 4) & "." & oExcel.Cells(12, 5)
  57.     vozn_date = oExcel.Cells(10, 7) & "." & oExcel.Cells(10, 8) & "." & oExcel.Cells(10, 9)
  58.     ystr_date = oExcel.Cells(12, 7) & "." & oExcel.Cells(12, 8) & "." & oExcel.Cells(12, 9)
  59.     obor_type = oExcel.Cells(17, 2)
  60.     obor_mark = oExcel.Cells(19, 2)
  61.     proizv = oExcel.Cells(21, 2)
  62.     zav_num = oExcel.Cells(23, 2)
  63.     vip_date = oExcel.Cells(23, 7) & "." & oExcel.Cells(23, 8) & "." & oExcel.Cells(23, 9)
  64.     vv_date = oExcel.Cells(25, 2)
  65.     inv_num = oExcel.Cells(27, 2)
  66.     yst_site = oExcel.Cells(29, 2)
  67.     tempr = oExcel.Cells(29, 7)
  68.     TO_date = oExcel.Cells(31, 2)
  69.     prot_num = oExcel.Cells(31, 6)
  70.     neisp_desc = oExcel.Cells(33, 2)
  71.     ystr_met = oExcel.Cells(35, 2)
  72.     posl = oExcel.Cells(37, 2)
  73.     prich = oExcel.Cells(39, 2)
  74.     povt_izv_date = oExcel.Cells(41, 5) & "." & oExcel.Cells(41, 6) & "." & oExcel.Cells(41, 7)
  75.     predl_pov_nad = oExcel.Cells(43, 3)
  76.     pril = oExcel.Cells(45, 3)
  77.     pers = oExcel.Cells(47, 2)
  78.  
  79.     '----------------------------------
  80.     'Запись из Excel в базу данных
  81.     oCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DB.mdb;Persist Security Info=False"
  82.     oCon.Open() 'открываем БД
  83.   
  84.     ' oCommand.ActiveConnection = oCon
  85.     oCommand.CommandText = "insert into temp values ('" & izv_id & "','" & izv_date & "','" & fil_name & "','" & o_name & "','" & ob_name & "','" & vozn_time & "','" & ystr_time & "','" & vozn_date & "','" & ystr_date & "','" & obor_type & "','" & obor_mark & "','" & proizv & "','" & zav_num & "','" & vip_date & "','" & vv_date & "','" & inv_num & "','" & yst_site & "','" & tempr & "','" & TO_date & "','" & prot_num & "','" & neisp_desc & "','" & ystr_met & "','" & posl & "','" & prich & "','" & povt_izv_date & "','" & predl_pov_nad & "','" & pril & "','" & pers & "')"
  86.  
  87.     oCon = Nothing
  88.     oCommand = Nothing
  89.     ors = Nothing
  90.     oExcel = Nothing
  91. End Sub

Ответить

Номер ответа: 2
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 20.05.10 08:03
  1.  
  2. '...
  3.     Dim queryString As String = "insert into ... blah-blah-blah"
  4.     Dim connectionString = "Provider=Microsoft.Jet....."
  5.     Using connection As New OleDbConnection(connectionString)
  6.         connection.Open()
  7.         Dim command As New OleDbCommand(queryString, connection)
  8.         command.ExecuteNonQuery()
  9.     End Using
  10. '...

Ответить

Номер ответа: 3
Автор ответа:
 Alba



Вопросов: 8
Ответов: 37
 Профиль | | #3 Добавлено: 20.05.10 09:34
Сделала, теперь выдается ошибка: Exception from HRESULT: 0x800A03EC (в любой строке, начиная с 50 - при вводе данных)

http://www.sql.ru/forum/actualthread.aspx?tid=689851 - посмотрела здесь, так и не поняла что исправил человек чтобы всё было как нужно. Может вы знаете в чем проблема?

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 20.05.10 12:04
показывайте весь код процедуры

Ответить

Номер ответа: 5
Автор ответа:
 Alba



Вопросов: 8
Ответов: 37
 Профиль | | #5 Добавлено: 20.05.10 12:18
На форме FileUpload, кнопка «ОК» и «Экспортданных». В обработчике кнопки «Экспорт данных» пишу следующий код:

  1.  
  2. Protected Sub Button7_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button7.Click
  3.         
  4.         Dim oExcel As Excel.Application
  5.         Dim oCon As OleDbConnection
  6.         Dim oCommand As OleDbCommand
  7.         Dim oRS As ADODB.Recordset
  8.  
  9.  
  10.         oExcel = New Excel.Application
  11.         oCon = New OleDbConnection
  12.         oCommand = New OleDbCommand
  13.         Dim fil_name As String
  14.  
  15.         oExcel.Visible = True
  16.         Dim FileName As Boolean = True
  17.  
  18.         If IsPostBack = True And FileUpload3.HasFile = True Then
  19.             Dim m_filePath As String = "C:\" & FileUpload3.FileName
  20.             FileUpload3.PostedFile.SaveAs(m_filePath)
  21.             oExcel.Workbooks.Open(m_filePath)
  22.         End If
  23.    
  24.        'Пока передаю один параметр  fil_name из ячейки (6, 2)
  25.  
  26.         fil_name = oExcel.Cells(6, 2)
  27.         
  28.         '----------------------------------
  29.         'Запись из Excel в базу данных
  30.         Dim queryString As String = "insert into temp values ('" & fil_name & "')"
  31.         Dim connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DB.mdb;Persist Security Info=False"
  32.         Using connection As New OleDbConnection(connectionString)
  33.             connection.Open()
  34.             Dim command As New OleDbCommand(queryString, connection)
  35.             command.ExecuteNonQuery()
  36.         End Using
  37.  
  38.         '----------------------------------
  39.         
  40.         oCon = Nothing
  41.         oCommand = Nothing
  42.         oRS = Nothing
  43.         oExcel = Nothing
  44.     End Sub
  45.  

Ответить

Номер ответа: 6
Автор ответа:
 Jasmin



Вопросов: 23
Ответов: 417
 Профиль | | #6 Добавлено: 20.05.10 16:44
Можно влезть ? :-)
В строчках похожих на
  1. fil_name = oExcel.Cells(6, 2)
мне кажется нужно указывать еще и лист, а то получается Application.Cells(*). Excel не понимает, на каком листе писать/брать информацию.

Ответить

Номер ответа: 7
Автор ответа:
 Alba



Вопросов: 8
Ответов: 37
 Профиль | | #7 Добавлено: 20.05.10 17:05
Если я правильно поняла, то вы имеете ввиду это:
  1. fil_name = oExcel.Workbooks.Cells(6, 2)


Но так выдается ошибка: 'Cells' is not a member of 'Microsoft.Office.Interop.Excel.Workbooks'.

Ответить

Номер ответа: 8
Автор ответа:
 Alba



Вопросов: 8
Ответов: 37
 Профиль | | #8 Добавлено: 20.05.10 17:06
Может я что-то не доподключила, или переподключила...из библиотек...

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 20.05.10 17:25
Jasmin абсолютно права.. у объекта Excel и Workbooks нет объекта Cells! Тебе надо работать с конкретныи листом..
Пишу по памяти, поэтому возможно где то ошибусь, но логику ты поймешь..
1. Получаем ссылку на книгу
Dim ex_Workbook As Workbook = oExcel.Workbooks(1) ' или 0, я точно не помню со скольки там индекс начинается
2. Получаем ссылку на лист в нужной книге
Dim ex_Worksheet As Worksheet = Workbook.Worksheets(1) ' или 0
И вот дальше уже работаешь с ячейками этого листа
fil_name = ex_Worksheet.Cells(6, 2).Value ну и т.д..
в конце опять таки не забудь все эти объекты удалить

Ответить

Номер ответа: 10
Автор ответа:
 Alba



Вопросов: 8
Ответов: 37
 Профиль | | #10 Добавлено: 20.05.10 17:59
Почему то, что в случае с индексом "0", то и в случае с индексом "1" получаю ошибку неверного индекса: "Неверный индекс. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))"

Ответить

Номер ответа: 11
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 20.05.10 18:27
А вот это уже вылазит боком твой WebApplication и условие If IsPostBack = True .. На момент первой загрузки страницы книга еще не открыта и само собой ты получаешь ошибку.. Удаляй все нафиг и создавай проект Windows Forms Application и портируй свой код туда (открывать файл будешь через OpenFileDialog). Гораздо проще переделать твой проект чем объяcнять тебе что такое IsPostBack и как от этого избавится..

Ответить

Номер ответа: 12
Автор ответа:
 Alba



Вопросов: 8
Ответов: 37
 Профиль | | #12 Добавлено: 20.05.10 18:35
Доделала до того что ошибка не выдается, но экспорт при этом все равно не работает..((

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 20.05.10 18:40
но экспорт при этом все равно не работает..((

чудес на свете не бывает.. значит что то где то не так.. снова показывай код

Ответить

Номер ответа: 14
Автор ответа:
 Alba



Вопросов: 8
Ответов: 37
 Профиль | | #14 Добавлено: 20.05.10 18:45
Вот такая выходит штука:

  1.  
  2. Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
  3.         Dim oExcel As Excel.Application
  4.         Dim oCon As OleDbConnection
  5.         Dim oCommand As OleDbCommand
  6.         Dim oRS As ADODB.Recordset
  7.  
  8.         
  9.         oExcel = New Excel.Application
  10.         oCon = New OleDbConnection
  11.         oCommand = New OleDbCommand
  12.         Dim izv_id
  13.         Dim fil_name As String
  14.         
  15.  
  16.         Dim FileName As Boolean = True
  17.         If IsPostBack = True And FileUpload1.HasFile = True Then
  18.             Dim m_filePath As String = "C:\" & FileUpload1.FileName
  19.             FileUpload1.PostedFile.SaveAs(m_filePath)
  20.             oExcel.Workbooks.Open(m_filePath)
  21.  
  22.  
  23.             ' Получаем ссылку на книгу
  24.                         Dim ex_Workbook As Excel.Workbooks = oExcel.Workbooks() '1 или 0,
  25.             ' Получаем ссылку на лист в нужной книге
  26.             Dim ex_Worksheet As Excel.Worksheets = oExcel.Worksheets() '1 или 0
  27.             'работа с ячейками этого листа
  28.             izv_id = ex_Worksheet.Cells(2, 3)
  29.             fil_name = ex_Worksheet.Cells(6, 2).Value
  30.             
  31.             oExcel.Visible = True
  32.  
  33.             '----------------------------------
  34.             'Запись из Excel в базу данных
  35.             Dim queryString As String = "insert into temp values ('" & izv_id & "',  '" & fil_name & "')"
  36.             Dim connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\DB.mdb;Persist Security Info=False"
  37.             Using connection As New OleDbConnection(connectionString)
  38.                 connection.Open()
  39.                 Dim command As New OleDbCommand(queryString, connection)
  40.                 command.ExecuteNonQuery()
  41.             End Using
  42.  
  43.             '----------------------------------
  44.         End If
  45.         oCon = Nothing
  46.         oCommand = Nothing
  47.         oRS = Nothing
  48.         oExcel = Nothing
  49.  
  50. End Sub
  51.  
  52.  
  53.  

Ответить

Номер ответа: 15
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #15 Добавлено: 20.05.10 18:48
ну конечно не будет работать.. он у тебя по идее даже скомпилиться не должен был..
надо писать так
Dim ex_Workbook As Excel.Workbook = oExcel.Workbooks(1)
Dim ex_Worksheet As Excel.Worksheet = oExcel.Worksheets(1)

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам