Badya1991 0 / 0 / 0 Регистрация: 19.02.2016 Сообщений: 14 |
||||
1 |
||||
20.01.2017, 04:02. Показов 11382. Ответов 23 Метки нет (Все метки)
Добрый день, есть запрос на добавление данных из файла excel, выгруженного из 1С, в базу данных MS Access, по столбцам в существующую таблицу:
Проблема: MS Access при загрузке данных путем этого запроса определяет тип данных по первым 8 строкам, в столбце СчетДт первые 8 строк содержат число 20 (20 счет), далее есть счет 90.01.1 и тд, эти данные он не понимает и выдает ошибку #Число!, как можно решить эту проблему и загрузить это поле сразу текстовым, то есть по умолчанию задать тип данных текст? Добавлено через 1 час 0 минут
0 |
4038 / 1423 / 394 Регистрация: 07.08.2013 Сообщений: 3,541 |
|
20.01.2017, 04:12 |
2 |
надо в excel этот столбец сделать текстовым до загрузки Добавлено через 59 секунд
0 |
0 / 0 / 0 Регистрация: 19.02.2016 Сообщений: 14 |
|
20.01.2017, 04:20 [ТС] |
3 |
Выгружаю я реестр доходов и расходов, выгружается несколько десятков тысяч строк, чтобы поменять число в текст нужно выделить ячейку выбрать формат текст потом выбрать ячейку и нажать enter, если писать макрос я так подозреваю будет долгое преобразование, нельзя на этапе запроса преобразовать число в текст, как то же через мастер импорта число в текст преобразуется и без проблем, если изначально выставить его в текст.
0 |
snipe 4038 / 1423 / 394 Регистрация: 07.08.2013 Сообщений: 3,541 |
||||
20.01.2017, 04:23 |
4 |
|||
Наверное так
0 |
Badya1991 0 / 0 / 0 Регистрация: 19.02.2016 Сообщений: 14 |
||||
20.01.2017, 04:24 [ТС] |
5 |
|||
Написал такой запрос пишет ошибка преобразования данных 97 значениям присвоено значение null ЗЫ: Уже делал так.
0 |
4038 / 1423 / 394 Регистрация: 07.08.2013 Сообщений: 3,541 |
|
20.01.2017, 04:31 |
6 |
столбец то называть надо Добавлено через 1 минуту Добавлено через 2 минуты Добавлено через 37 секунд
0 |
0 / 0 / 0 Регистрация: 19.02.2016 Сообщений: 14 |
|
20.01.2017, 04:36 [ТС] |
7 |
Я выше писал, что первые значения число 20 (20 счет в бухгалтерии), а то значение которое не попало : 90.01.1, он не может распознать как число, и таких значений 97 штук. Если я в самом первом значении ставлю 20. (с точкой) тогда нет проблем с загрузкой.
0 |
snipe 4038 / 1423 / 394 Регистрация: 07.08.2013 Сообщений: 3,541 |
||||
20.01.2017, 04:49 |
8 |
|||
а можно файлик excel увидеть Добавлено через 9 минут
Добавлено через 2 минуты
0 |
0 / 0 / 0 Регистрация: 19.02.2016 Сообщений: 14 |
|
20.01.2017, 04:50 [ТС] |
9 |
Desktop.rar Вот база и пример excel, только в запросе отредактируйте свой путь.
0 |
4038 / 1423 / 394 Регистрация: 07.08.2013 Сообщений: 3,541 |
|
20.01.2017, 04:51 |
10 |
к сожалению у меня на работе нет акса
0 |
Badya1991 0 / 0 / 0 Регистрация: 19.02.2016 Сообщений: 14 |
||||
20.01.2017, 04:52 [ТС] |
11 |
|||
а можно файлик excel увидеть
Добавлено через 2 минуты Это нужно будет заходить в excel ждать пока строки переформатируются, а хотелось бы на этапе запроса, я так понимаю что это сделать можно, если через мастер импорта добавлять новую таблицу там без проблем
0 |
4038 / 1423 / 394 Регистрация: 07.08.2013 Сообщений: 3,541 |
|
20.01.2017, 04:55 |
12 |
ну а если просто тупо — выделить столбец и выбрать формат ячеек Текстовый
0 |
0 / 0 / 0 Регистрация: 19.02.2016 Сообщений: 14 |
|
20.01.2017, 05:00 [ТС] |
13 |
Нет, чтобы в Excel переделать формат из числа в текст вручную надо выделить столбец и потом выделять каждую ячейку и жать Enter
0 |
7267 / 4469 / 288 Регистрация: 12.08.2011 Сообщений: 13,512 |
|
20.01.2017, 05:57 |
14 |
чтобы поменять число в текст нужно выделить ячейку выбрать формат текст потом выбрать ячейку и нажать enter должен вас огорчить, вас обманули в экселе выделяете столбец и меняете формат сразу всего столбца. Добавлено через 1 минуту
Нет, чтобы в Excel переделать формат из числа в текст вручную надо выделить столбец и потом выделять каждую ячейку и жать Enter у меня без всяких махинаций меняет сразу число на текст
0 |
4038 / 1423 / 394 Регистрация: 07.08.2013 Сообщений: 3,541 |
|
20.01.2017, 06:11 |
15 |
alvk,
0 |
7267 / 4469 / 288 Регистрация: 12.08.2011 Сообщений: 13,512 |
|
20.01.2017, 06:23 |
16 |
Было сложно поменять текст на число, а не наоборот. Тогда нужно было умножать специальной вставкой на 1. Но тут на оборот же!
0 |
0 / 0 / 0 Регистрация: 19.02.2016 Сообщений: 14 |
|
20.01.2017, 06:44 [ТС] |
17 |
должен вас огорчить, вас обманули в экселе выделяете столбец и меняете формат сразу всего столбца. Я не огорчен, потому что как вы написали так не получится, нужно чтобы в Excel было число как текст, и чтобы это получилось нужно сначала поменять формат, зайти в редактирование ячейки и нажать enter, в итоге появится такой треугольник в углу зеленый который покажет что число как текст, после этого в access загрузится, по вашему методу будет таже ошибка.
0 |
7267 / 4469 / 288 Регистрация: 12.08.2011 Сообщений: 13,512 |
|
20.01.2017, 07:30 |
18 |
Если есть сомнения, скачайте архив поменяйте путь к файлу пример в запросе, сделайте как вы предлагаете и посмотрите что получится. У меня есть сомнения, что вы прочли мою подпись, я её не для красоты сделал. Файл экселя открыл, столбец поменял на текст, без проблем, никаких энтеров не нажимал.
0 |
0 / 0 / 0 Регистрация: 19.02.2016 Сообщений: 14 |
|
20.01.2017, 07:44 [ТС] |
19 |
Файл экселя открыл, столбец поменял на текст, без проблем, никаких энтеров не нажимал. Вы теперь загрузите в access через запрос эти данные, и увидите что это не текст. Тема актуальна, решения не нашел, желательно бы без махинаций в excel
0 |
mobile 26777 / 14456 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||||||
20.01.2017, 08:08 |
20 |
|||||||
Сообщение было отмечено Badya1991 как решение РешениеBadya1991, измените параметр HDR на HDR=No. Первая строка будет именем, текстом и запрос пройдет
Потом удаляете строку с именем поля и все идет без ошибок. Кстати, параметр XML в драйвере необязательный, он нужен для файлов с программируемой структурой, типа xlsm. Но можно и оставить Добавлено через 8 минут
1 |
I have a 2010 Excel file
with a sheet that spans 34864 rows
and 1387 columns
. I’m trying to import it into Access 2010
with the import wizard, but when I select that sheet, Access goes unresponsive, and after several seconds gives me a
«Unexpected error from external database driver (1)»
Is this due to the size of the sheet or is there something in the cells that stops it from working. Other sheets from the same file import with no problem.
asked May 2, 2012 at 21:20
2
You may experience this error after installing security patch KB4041681. See this MSDN entry.
In my case, replacing Microsoft.Jet.OLEDB.4.0
provider with Microsoft.ACE.OLEDB.12.0
helped.
Adil B
14.1k11 gold badges61 silver badges74 bronze badges
answered Oct 25, 2017 at 12:41
0
I just experienced this problem too and found a very simple, easy solution. I noticed that my spreadsheet had a custom name so I decided to see if that was causing the problem. I changed it to the default name of «Sheet1» and, sure enough, it worked!!
answered Dec 5, 2014 at 17:19
Download and install the Microsoft Access Database Engine 2010 Redistributable, and then modify the DB connection strings in Microsoft Excel to use ACE as a provider.
Change (example):
Provider=Microsoft.Jet.OLEDB.4.0
to:
Provider=Microsoft.ACE.OLEDB.12.0.
Microsoft is working on a resolution and will provide an update in an upcoming release.
Axel
3,28511 gold badges38 silver badges58 bronze badges
answered Oct 22, 2017 at 18:59
1
Use this
OleDbConnection conObj = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\a.XLS;Extended Properties=Excel 8.0;")
instead of this
OleDbConnection conObj = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\a.XLS;Extended Properties=Excel 8.0;")
answered Oct 25, 2017 at 8:02
alexeyalexey
7631 gold badge7 silver badges19 bronze badges
Save your Excel sheet to a ‘Comma delimited’ .CSV file, and then upload it as Text File. For me, this works fine.
The problem is that in .xls(x) all kind of lay-out issues are present. Converting it into .CSV removes all lay-out related mark up and converts in into ‘raw’ data.
all the best!
answered Dec 29, 2015 at 8:45
Along the lines of RHiggins answer:
In my case Jet OleDb.4.0 threw this error (oledbconnection.open()) because the name of a worksheet in a workbook (.xls) was too long.
answered May 17, 2016 at 16:28
A solution that has worked for me when tackling this issue is to have the Excel File where the Import / Export is being executed open when the Import & Export is happening.
The issue appears to be caused by the Patch preventing data transaction from occurring between CLOSED .xls files and other external database applications. Having the excel file open addresses this issue.
Some sample code examples below to highlight what works and what doesn’t with VBA:
FAILS
wbTarget.SaveAs strFilename, xlExcel8
wbTarget.Close
ExportSheetToDB strFilename, strSheetName, "tblTemp"
WORKS
wbTarget.SaveAs strFilename, xlExcel8
ExportSheetToDB strFilename, strSheetName, "tblTemp"
wbTarget.Close
answered Nov 3, 2017 at 22:50
There seems to be a bug between Excel and Access. In some instances, I have to open the Excel file, click save, and then close the file. Then I can import it without error into Access.
I have yet to find a work around for this for VBA automation.
Jeremy Caney
6,95959 gold badges50 silver badges76 bronze badges
answered Sep 13, 2021 at 19:53
In my case the spreadsheet was linked to another spreadsheet. I was importing a subset of the original sheet. I created a new sheet and copied the data column by column to notepad and then to the new sheet removing the links.
There was something in the links which was causing the problem.
BTW: it was this one set of data since I’ve done this import sequence from this one spreadsheet to this database more than 50 times. Halving the data worked for the first (larger) half of the data, but not for the second.
answered Apr 20, 2015 at 15:57
DaveDave
1,23413 silver badges24 bronze badges
hi I am also facing this error when import .xlsb file. After that i copied the contents to another xlsx file then import this xlsx file.
answered Apr 5, 2016 at 5:02
SingaravelanSingaravelan
7793 gold badges18 silver badges32 bronze badges
I was getting this error when importing from a XLSB file, save the file as XLSX file and then import, should work
answered Feb 14, 2017 at 11:21
bharat1010bharat1010
351 silver badge6 bronze badges
Another issue that is discovered is if the excel file is saved as a binary excel worksheet just resave it as an excel workbook and it loaded fine.
answered Feb 15, 2017 at 16:04
I had the exact same error.
The spreadsheet was created from another software (SAP). Since it was not created by Office, Excel was not able to read it (!?!).
I have to open them in Excel, save it, and then load it in Access and it works!
As a worst case scenario, let’s say you have dozens of files, you could just open and close them by VBA code before import.
answered Mar 10, 2017 at 20:58
Séb CôSéb Cô
891 silver badge8 bronze badges
Solved for Windows 7:
Uninstall Security Update KB4041681 and KB4041678 both(Related to Excel and Jet/ACE provider)
rene
41.1k78 gold badges118 silver badges150 bronze badges
answered Oct 31, 2017 at 9:39
In my case (I has the same error) the problem was that I had the Access DB stored on a network drive which ran out of space (not enough free space for the import to finish). I freed up space and compacted the DB; the error didn’t appear again.
answered Apr 27, 2018 at 8:31
I had same issue, after getting a security update in Windows7 this error occurred. We have too many excel files to perform an open/close operation so I decided to try other ways.
-
Return a restore point when Access worked fine: It did not work in my case. The only change in software configuration is a security update and it seems security update still causes problem.
-
Reducing rows, columns etc: It did not work for me; first file that access tried to reach had 10k rows, reducing this rows to 3 was not the solution.
-
Trying to modify connection string: It did not work for me, it is not very reasonable as well; connection has been working for years, suddenly why would it stop? In some cases it does but not this time.
-
Uninstalling most recent security update worked for in my case. Here is the uninstalled security update.
Good luck with solving.
Jeremy Caney
6,95959 gold badges50 silver badges76 bronze badges
answered Oct 31, 2017 at 6:40
Я’импортирую электронную таблицу из Excel 2003 в Access 2003 с помощью ADO (Provider = "Microsoft.Jet.OLEDB.4.0"
). Однако у меня есть несколько текстовых записей в поле даты. Они передаются как значения #Num!
, как и следовало ожидать.
Что я хотел бы сделать, так это обернуть поля с ошибками в нечто вроде IIf(IsDate(FIELDNAME),FIELDNAME,#1/1/1900#)
. Однако это все равно приводит к результату #Num!
. Также как и проверка IsDate()
, IsDate(CVar())
, IsError()
, IsError(CDat())
, и VBAFunctionThatReturns0GivenAnyValue(FIELDNAME)
.
У кого-нибудь есть идеи, какую функцию-обертку я могу использовать, которая выполнит эту работу? Я более или менее в своем уме?
Обратите внимание: у меня нет никакого контроля над импортированными данными, поэтому я не могу исправить таблицу, как бы мне этого не хотелось. Я также хотел бы избежать специфического хакинга в самой функции импорта (например, использовать TransferSpreadsheet вместо нее). Цель состоит в том, чтобы использовать тот же подход к вводу данных, просто игнорировать те части, которые не работают.
Также следует отметить, что здесь уместно отбрасывать значения без даты. Импорт в виде текста — это то, чего я хотел бы избежать, поскольку это вызовет множество других ошибок в дальнейшем.
EDIT: Добавил условие, 2003. Я также должен отметить, что версия .Net framework, установленная в среде, не включает (или, похоже, не включает) провайдера ACE.12.0.
Edit 2: Как и просили, вот (слегка очищенная) версия SQL, который я выполняю. Обратите внимание, что это не точный запрос, но его выполнение на той же таблице вызывает те же проблемы:
Проблему можно увидеть, убрав предложение INTO
и посмотрев на значения для [Date]
. Если любое из них равно #Num!
Тогда даже выполнение следующих действий приводит к `#Num!« для всех Test1-5, что скорее демонстрирует проблему..:
На днях столкнулся с ошибкой «Run-time error ‘2391’», на которую потратил кучу времени, не говоря уже о нервах =)
Суть проблемы в следующем:
Допустим, нужно импортировать данные таблички из Excel в Access. Для этого имеем такую вот структуру в Excel (см.рисунок).
Для того, чтобы импорт свершился нужно создать такую же табличку с такими же заголовками полей в Access.
Все, структура данных в Excel есть, таблица для импорта в Access создана. Фактически, теперь все приготовления закончены. А теперь при помощи вот такой вот строки в коде должен произойти импорт данных из нашей таблички Excel в табличку table_1 в Access:
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, «table_1», «путь_к_файлу_Excel», True, «Имя_листа_Excel$»
И вроде бы все должно работать, ан нет! Получаем примерно следующее заявление:
Конечно, первое, что приходит на ум — проверить соответствие названий столбцов в Excel и в таблице Access. Чаще всего находятся наименования, которые не соответствуют друг другу. В этом случае исправляем их, чтобы названия были идентичными, и — вуаля! — все работает.
А если все поля друг другу соответствуют, но ошибка все равно возникает? А вот тут может иметь место следующий нюанс. Excel при импорте, так сказать проверяет наличие информации в ячейках и составляет для себя таблицу импорта. Технически может быть по-другому, но для понимания удобней всего такое сравнение.
Так вот, возвращаясь к примеру выше, если вдруг в ячейке столбца «F» или «G» затесался какой-нибудь невидимый символ, например пробел, то Excel автоматом включит эти столбцы в свою таблицу импорта. Естественно, что этих столбцов в таблице Access не предусмотрено. То есть получится, что из Excel импортируется больше столбцов, чем есть в результирующей таблице table_1. Именно по этой причине нам в этом случае и выдается ошибка 2391.
Для того, чтобы все наладить, нужно удалить пустые столбцы справа от таблицы. Макросом это можно сделать вот так:
Columns(«F:G»).Select
Selection.Delete Shift:=xlToLeft
или так:
Columns(«G:I»).Delete Shift:=xlToLeft
В крайнем случае, всегда можно проделать данную операцию вручную, выбрав нужные столбцы -> правой кнопкой мыши -> «Удалить».