
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
15.08.2004, 17:49:34
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
Прошу прощения, это не моя проблема. Знакомый попросил узнать. Я бы сам разобрался, но и дома, и на работе у меня Access глючит при запуске. Поскольку я на нем не работаю, то и разбиратся с этими глюками мне в лом. Вопрос. В таблице Excel есть текстовая колонка. Значения в ней могут быть похожими на числа. Например. 1.234 1.234-А АН-14 Если в первой строке стоит значение, похожее на число, то при импорте в Access такое поле опознается, как числовое. Явное указание формата в Excel не помогает. Знакомый утверждает, что у него при импорте недоступна опция "Указать тип поля". К сожалению, проверить это я не могу. Импортировать приходится разные таблы, периодичность: два-три раза в неделю. Решения, котрые о которых мы подумали. 1. Отсортировать таблу по этому полю в обратном порядке (он предложил). 2. Вставить в таблицу фиктивную первую строку с однозначными значениями полей, а после импорта - удалить ее (он предложил). 3. Написать кусок кода, который бы по форматам первой строки Excel-таблицы строил бы Access-таблицу, а потом импортироывал бы в нее данные.(я предложил, но по каким-то религиозным соображениям это ему не очень понравилось. Хотя с написанем кода у него проблем не возникнет) Может быть мы не знаем каких-то "секретных" опций? ========== Еще раз прошу прощения за тупой вопрос, но я ОБЕЩАЛ спросить об этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.08.2004, 18:34:21
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
Я дествую в таком случае по 2-му варианту. Просто ставлю апострофы в первой строке, которую потом удаляю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.08.2004, 19:45:25
|
|||
|---|---|---|---|
|
|||
Excel->Access |
|||
|
#18+
Cat2Еще раз прошу прощения за тупой вопрос, но я ОБЕЩАЛ спросить об этом. Совершенно неуместный комплекс и совершенно нормальный вопрос. :^) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.08.2004, 21:45:06
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
(А_XP+E_XP) варианты 1) и 2) скорее всего не прокатят ( по крайней мере в офис икспи) по причине того, что найденные в клетках числовые значения все равно будут в акцессе отображаться как (!#не число) я попробовал бы присоветовать такой заход: а) заказать у столбца в екселе формат - текст и + б) зарисовать (в екселе) макрос, который будет который будет приводить числа к строковому виду малость коряво, у меня вышло так (работает на текущем выделении) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.08.2004, 22:04:50
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
дополнение обнаружилось, что если числовых клеток в выделенном диапазоне нет, то Код: plaintext даст ошибку времени исполнения. поэтому перед нужно включить обработчик ошибок типа Код: plaintext и по концу цикла Код: plaintext 1. 2. 3. 4. (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.08.2004, 22:33:44
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
еще дополнение - на всякий случай. утверждение "не прокатят" основывалось на разглядывании линкованных, а не импортированных таблиц. (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.08.2004, 23:02:48
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
В свое время вел диспут по этому вопросу. Было много предложений, сделал гибридную версию. Скачивает с экселя спокойно, абсолютно не беспокоясь , какие там типы данных. Если в таблице указан тип «текстовой», то числовые экселевские данные преобразует в текстовой без всяких вопросов. Работает как часы. Спасибо Санычу, Темному и другим. Посмотри топик (хоть убей не помню, но называется "Можно ли оптимизировать этот код" № 852037, Саныч ! МОЖЕТ ПОДСКАЖИТЕ ГДЕ ОН?) Dim xa As Excel.Application Dim xw As Excel.Workbook Dim xs As Excel.Worksheet Dim z1, z2, z3, z4, z8, z10, z12 As String Dim z5, z6, z7, z11 As Double Dim z9 As Date Dim i As Integer Set xw = GetObject(CurrentProject.Path & "\contracts.xls", "Excel.sheet") Dim r As Excel.Range Dim V Dim sss As String Set r = xw.ActiveSheet.UsedRange sss = "A1:K" & r.Rows.Count + 1 – (формирует диапазон типа «А1:К100», т.е. до конца занятых ячеек) V = xw.ActiveSheet.Range(sss).Value – (забирает данные из Экселя в массив из соответствующего диапазона) z12 = xw.ActiveSheet.Cells(2, 2) – (это у меня соответствующая постоянная для всех) For i = 5 To r.Rows.Count + 1 – (считывание значений из экселя в цикле начиная с нужной строки, в данном случае «5», но нужно поиграть значениями) If IsEmpty((V(i, 2))) Then – (проверяет на наличие пустой строки и заканчивает считывание если пустое, где i-строка экселя) GoTo 777 End If Set rst = CurrentDb.OpenRecordset("Поступления") – (вгоняет в таблицу Акцесса и абсолютно по-барабану, какие типы данных в экселе) rst.AddNew rst![Товар] = V(i, 1) rst![Наименование] = V(i, 2) rst![Категория] = V(i, 3) rst![Единицы] = V(i, 4) rst![Кол-во] = V(i, 5) rst![Себестоимость] = IIf(V(i, 6) = "", 0, V(i, 6)) rst![Себестоимость TMM] = IIf(V(i, 7) = "", 0, V(i, 7)) rst![Валюта] = V(i, 8) rst![Дата] = V(i, 9) rst![Поставщик] = V(i, 10) rst![Контра] = z12 rst.Update rst.Close Next i 777: DoCmd.Close DoCmd.OpenForm "Контракт" Exit Sub Привожу пример как выглядит у меня таблица экселя, в поле "Товар" можно писать и число "123" и текст "123Х", главное, что в таблице поступление поле товар прописано текстовым. Работает, клиенты не жалуются. Избегайте прямого преобразования!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.08.2004, 23:19:47
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
2 Ukraina оформил бы ты это дело в мастер импорта. Хотя мое скромное мнение, что удобнее наверно было бы со стороны екселя - в мастер экспорта. ----------------------------------- по поводу цикла преобразования в строку в приведенном мною коде - возможно умнее было бы цикл по столбцам сделать внешним. мерять лень. (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.08.2004, 23:37:10
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
Victosha2 Ukraina оформил бы ты это дело в мастер импорта. Хотя мое скромное мнение, что удобнее наверно было бы со стороны екселя - в мастер экспорта. ----------------------------------- по поводу цикла преобразования в строку в приведенном мною коде - возможно умнее было бы цикл по столбцам сделать внешним. мерять лень. (с выражением лица) 2 Victosha Я бы с удовольствием, но честно говоря не понял как это дело оформить в "мастер импорта". Если не трудно, то можно развернуть эту тему. Я (если я правильно понял) с удовольствием сделал бы на основе этого всего некую функцию (dll?) и просто одной строкой как-то вгонял. Давай продолжим тему, разъясни для чайника более детально "мастер экспорта" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2004, 00:00:20
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
2 Ukraina для чайника - это для меня. потому что я чайник и есть. у меня и свисток в наличии имеется. если говорить о мастере экспорта (в екселе), то делать грубо-приблиздительно так. 1) заводишь отдельный ексельный книг. 2) рисуешь в ей userForms для выбора диапазонов и вставляешь потребный код - для поиска файла/линковки-создания таблиц/экспорта данных 3) сохраняешь книг в xla 4) устанавливаешь надстройку через сервиз->надстройки про надстройки для акцесса смотри у Гетса. вот сидю, ковыряю в носу - думаю - нарисовать, что ли? (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2004, 01:00:40
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
2 Victosha Сильно ты тут наговорил. Раньше я думал, что только Акцесс плохо знаю, а теперь понял, что и Эксель... Из всего, что ты написал, понял только первый пункт (без приколов). Может лучше разделим функции, ты в экселе, я в акцессе. Ты вот в носу ковыряешь, а я после твоих слов рву волосы (ну понятно где). Вообщем труба... Жизнь меня не перестает удивлять... Может все-таки более детально опишешь как это все в экселе, можно на почту, только как можно детальнее и проще (а то у тебя хоть свисток есть, а у меня и того нема) Но в общем идея понятно, и было бы не плохо ее оформить в неком чем-то, для простого применения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2004, 01:01:44
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
2 Victosha Сильно ты тут наговорил. Раньше я думал, что только Акцесс плохо знаю, а теперь понял, что и Эксель... Из всего, что ты написал, понял только первый пункт (без приколов). Может лучше разделим функции, ты в экселе, я в акцессе. Ты вот в носу ковыряешь, а я после твоих слов рву волосы (ну понятно где). Вообщем труба... Жизнь меня не перестает удивлять... Может все-таки более детально опишешь как это все в экселе, можно на почту, только как можно детальнее и проще (а то у тебя хоть свисток есть, а у меня и того нема) Но в общем идея понятно, и было бы не плохо ее оформить в неком чем-то, для простого применения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2004, 01:34:08
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
забери примеров отсюда http://archive.dialektika.com/cgi-bin/materials.cgi?isbn=5-8459-0541-9 вот страница с обложкой книжки http://www.dialektika.com/books/5-8459-0541-9.html получится и книжку прикупи, или закажи. Наверняка ведь кто-нибудь туда-сюда летает. (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2004, 11:20:09
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
а по существу первоначального вопроса, ответ, наверно, здесь http://support.microsoft.com/default.aspx?scid=kb;en-us;194124 (с выражением лица) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2004, 11:24:54
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
UkrainaВ свое время вел диспут по этому вопросу. Было много предложений, сделал гибридную версию. Скачивает с экселя спокойно, абсолютно не беспокоясь , какие там типы данных. Если в таблице указан тип «текстовой», то числовые экселевские данные преобразует в текстовой без всяких вопросов. Работает как часы. Спасибо Санычу, Темному и другим. Посмотри топик (хоть убей не помню, но называется "Можно ли оптимизировать этот код" № 852037, Саныч ! МОЖЕТ ПОДСКАЖИТЕ ГДЕ ОН?) Dim xa As Excel.Application Dim xw As Excel.Workbook Dim xs As Excel.Worksheet Dim z1, z2, z3, z4, z8, z10, z12 As String Dim z5, z6, z7, z11 As Double Dim z9 As Date Dim i As Integer Set xw = GetObject(CurrentProject.Path & "\contracts.xls", "Excel.sheet") Dim r As Excel.Range Dim V Dim sss As String Set r = xw.ActiveSheet.UsedRange sss = "A1:K" & r.Rows.Count + 1 – (формирует диапазон типа «А1:К100», т.е. до конца занятых ячеек) V = xw.ActiveSheet.Range(sss).Value – (забирает данные из Экселя в массив из соответствующего диапазона) z12 = xw.ActiveSheet.Cells(2, 2) – (это у меня соответствующая постоянная для всех) For i = 5 To r.Rows.Count + 1 – (считывание значений из экселя в цикле начиная с нужной строки, в данном случае «5», но нужно поиграть значениями) If IsEmpty((V(i, 2))) Then – (проверяет на наличие пустой строки и заканчивает считывание если пустое, где i-строка экселя) GoTo 777 End If Set rst = CurrentDb.OpenRecordset("Поступления") – (вгоняет в таблицу Акцесса и абсолютно по-барабану, какие типы данных в экселе) rst.AddNew rst![Товар] = V(i, 1) rst![Наименование] = V(i, 2) rst![Категория] = V(i, 3) rst![Единицы] = V(i, 4) rst![Кол-во] = V(i, 5) rst![Себестоимость] = IIf(V(i, 6) = "", 0, V(i, 6)) rst![Себестоимость TMM] = IIf(V(i, 7) = "", 0, V(i, 7)) rst![Валюта] = V(i, 8) rst![Дата] = V(i, 9) rst![Поставщик] = V(i, 10) rst![Контра] = z12 rst.Update rst.Close Next i 777: DoCmd.Close DoCmd.OpenForm "Контракт" Exit Sub Привожу пример как выглядит у меня таблица экселя, в поле "Товар" можно писать и число "123" и текст "123Х", главное, что в таблице поступление поле товар прописано текстовым. Работает, клиенты не жалуются. Избегайте прямого преобразования!!! ИМХО, до фига лишнего здесь у меня корректно работает просто Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Причем юзеры у меня ушлые иногда в числовые поля текст шуруют, чтоб не забыть чего - "вес будет проставлен позже", например. Так что еще и проверять приходится, что в ячейке... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.08.2004, 19:43:02
|
|||
|---|---|---|---|
Excel->Access |
|||
|
#18+
Всем спасибо за ответы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
17.08.2004, 09:42:24
|
|||
|---|---|---|---|
|
|||
Excel->Access |
|||
|
#18+
А у меня простейший макросок уже года 3 колбасит Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. пометки писались для одного моего друга, который ничего не смыслит в программировании, но решил разобрать в этой "крутой" по его мнению штуке :) изначально модуль был призван подготавливать данные для работы функции "ВПР" в екселе. Как ни странно - всё реально работает и щас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=45&mobile=1&tid=1672431]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 365ms |

| 0 / 0 |
