Выгружаем из 1С в EXCEL с помощью ADO. Часть II

Выгружаем из 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 Заранее благодарен.

Если публикация помогла Вам справится с проблемой, решить задачу или расширить свои знания - поддержите автора.

Комментарии:

  1. Антон:

    Не поможете понять, в чём ошибка. Делаю первым способом, с заданием типа колонки. При выполнении обработка вылетает с ошибкой:
    Ошибка при вызове метода контекста (Append): Произошла исключительная ситуация (Microsoft JET Database Engine): Нельзя определить поле более одного раза.
    Catalog.Tables.Append(Table);

  2. Антон:

    Разобрался 🙂
    Совпадали имена колонок.

  3. Давид:

    а возможно ли как-то удалить конкретные строки? т.е. к примеуру мне нужно удалить все строки после 7ой…..

    1. Администратор:

      Нет, по крайней мере у меня не получилось…

  4. Сергей:

    Подскажи какой плагин используешь для подсветки кода 1с на сайте?

Оставить комментарий на Антон