Выгружаем из 1С в EXCEL с помощью ADO. Часть II
Данная статья является логическим продолжением статьи «Выгружаем из 1С в EXCEL с помощью ADO. Часть I», в ней пойдёт речь о типизации выгружаемых данных, а так же о втором способе создания файла эксель (без использования объекта ADOX.Catalog).
Итак, сначала разберемся с типизацией колонок в создаваемом экселевском файле(для примера из первой статьи). Если Вы помните мы создали две колонки, но тип в явном виде не задали, при необходимости сделать это можно так:
Table = Новый COMОбъект("ADOX.Table"); Table.Name = "Table"; // Допустимые типы // adDouble = 5 Значение с плавающей точкой двойной точности // adDAte = 7 Дата // adCurrency = 6 Денежная сумма // adBoolean = 11 Булево // adVarWChar = 202 Символьная строка Unicode, заканчивающаяся NULL // adLongVarWChar = 203 Длинное строковое значение Column = Новый COMОбъект("ADOX.Column"); Column.Name = "ЧисловойСтолбец"; Column.Type = 5; Table.Columns.Append(Column); Column = Новый COMОбъект("ADOX.Column"); Column.Name = "ДатаСтолбец"; Column.Type = 7; Table.Columns.Append(Column); Column = Новый COMОбъект("ADOX.Column"); Column.Name = "СтроковыйСтолбец"; Column.Type = 202; Table.Columns.Append(Column); Column = Неопределено; Catalog.Tables.Append(Table);
Ну а теперь второй способ создания файла эксель(без использования объекта ADOX.Catalog):
СтрокаПодключения = " |Provider=Microsoft.Jet.OLEDB.4.0; |Data Source="+ИмяФайлаЭксельНовый+"; |Extended Properties=""Excel 8.0;HDR=YES"";"; Connection = Новый COMОбъект("ADODB.Connection"); Connection.ConnectionString = СтрокаПодключения; Connection.Open(); Command = Новый COMОбъект("ADODB.Command"); Command.ActiveConnection = Connection; Command.CommandText = "CREATE TABLE [МояТаблица] |(Символьный char(255), Дата date, Целый int, Дробный float)"; Command.Execute(); Command.CommandText = "INSERT INTO [МояТаблица] |(Символьный, Дата, Целый, Дробный) |values ('АБВГДЕЁ', '12/4/1955', '1234567', '12345,6789')"; Command.Execute(); Command = Неопределено; Connection.Close();
Записи таблицы можно изменить следующим образом:
Command.CommandText = "UPDATE [МояТаблица] SET Символы='абв' WHERE Целое=123"; Command.Execute();
А вот так можно удалить все данные на листе, при этом сам лист останется:
Command.CommandText = "DROP TABLE [МояТаблица]"; Command.Execute();
В заключении рассмотрим операции, которые мне НЕ УДАЛОСЬ выполнить:
1). Удалять записи по условию. (DELETE FROM [МояТаблица] WHERE Символы=’АБВГДЕЁ’)
2). Изменять структуру таблицы путём добавления и удаления столбцов, а так же изменения их типа. (Операторы: ALTER TABLE [МояТаблица] DROP COLUMN Дата, ALTER TABLE [МояТаблица] ADD НоваяКолонка data)
ОГРОМНАЯ просьба если кому-то удастся выполнить данные операции (или другие НЕОПИСАННЫЕ в данных статьях) сообщите мне на admin@obrabotki.com Заранее благодарен.
Если публикация помогла Вам справится с проблемой, решить задачу или расширить свои знания - поддержите автора.
Комментарии:
Чтобы оставить комментарий, Вы должны войти в систему.
Не поможете понять, в чём ошибка. Делаю первым способом, с заданием типа колонки. При выполнении обработка вылетает с ошибкой:
Ошибка при вызове метода контекста (Append): Произошла исключительная ситуация (Microsoft JET Database Engine): Нельзя определить поле более одного раза.
Catalog.Tables.Append(Table);
Разобрался 🙂
Совпадали имена колонок.
а возможно ли как-то удалить конкретные строки? т.е. к примеуру мне нужно удалить все строки после 7ой…..
Нет, по крайней мере у меня не получилось…
Подскажи какой плагин используешь для подсветки кода 1с на сайте?