Трикове за запазване на документ с електронна таблица в Excel за по-нататъшна работа с него. Трикове за запазване на документ с електронна таблица в Excel за по-нататъшна работа с него Програмно запазване на документ с електронна таблица в excel 1c

Трикове за запазване на документ с електронна таблица в Excel за по-нататъшна работа с него.  Трикове за запазване на документ с електронна таблица в Excel за по-нататъшна работа с него Програмно запазване на документ с електронна таблица в excel 1c
Трикове за запазване на документ с електронна таблица в Excel за по-нататъшна работа с него. Трикове за запазване на документ с електронна таблица в Excel за по-нататъшна работа с него Програмно запазване на документ с електронна таблица в excel 1c

За по-нататъшна работа с данните, получени в документ с електронна таблица от системата 1C от всяка версия, те могат да бъдат запазени във формат xls (x).

Всичко би било наред, но при отваряне в Excel-e, потребителят веднага разбира, че нещо не е наред с таблицата, добре, да, няма етикети на книжни листове. %)

Така беше в 7-та версия на 1C и мигрира към 8-ма, да, има напредък, в 8-ke можете да запазите във формат xlsx, собствен формат най-новите версии Excel i.

За да разрешите проблема, има няколко прости манипулации, първото нещо, което идва на ум за всеки потребител, е да запази отново таблицата в различен формат, но дори и тук няма желания резултат, тогава започваме копиране и поставяне в нова книга Excel.
Има и друга опция, както за напреднали потребители, е да отидете в настройките Excel и в раздела Разширени поставете отметка в квадратчето „Показване на етикети на листове“. Това е правилно, но и рутинно, в светлината на честата обработка на данни, получени от 1C под формата на плоски таблици и по-нататъшен анализ на данните във формата осеви таблиции други начини за представяне на данни в Excel.

По същия начин се уморих да тичам по квадратчетата за отметка и реших проблема, ровейки се в интернет, например, и гледайки някои други разработки, се оказа, че внедрява проста (за някои това е акордеон с бутони, за някои това е патерица, но за вкусовете не спорят) механизъм за автоматизация, решаващ проблема с показването на етикетите на листа.

Всичко, от което се нуждаете, е да използвате две свойства на прозореца на Excel:

DisplayWorkbookTabs // флаг за показване на раздели на листове с книги TabRatio // съотношение на ширината на областта на раздела на работната книга към ширината хоризонтална лентапревъртане на прозореца (като число между 0 (нула) и 1, стойност по подразбиране 0,6)

TabDocument.Write(FullFileName, FileTypeSpreadDocument.XLS); Excel = Нов COMObject("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Visible = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; Пълно име = Excel.ActiveWorkbook.Пълно име; Excel.DisplayAlerts = невярно; Excel.ActiveWorkbook.SaveAs(пълно име, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // ако трябва да работите допълнително с книгата
//Excel.Application.Quit() // ако просто излезем

TabDocument.Write(Пълно име на файл, "XLS"); Excel = CreateObject("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Visible = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; Пълно име = Excel.ActiveWorkbook.Пълно име; Excel.DisplayAlerts = невярно; Excel.ActiveWorkbook.SaveAs(пълно име, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // ако трябва да работите допълнително с книгата
//Excel.Application.Quit() // ако просто излезем

Този метод е прост. Същността му е, че обектът SpreadsheetDocumentима методи:

  • горя (< ИмяФайла>, < ТипФайлаТаблицы >) за качване на данни във файл;
  • Прочети (< ИмяФайла>, < СпособЧтенияЗначений >), за да заредите данни от файл.

внимание!

Методът Write() е наличен както на клиента, така и на сървъра. Методът Read() е достъпен само от страната на сървъра. Трябва да запомните това
когато планирате взаимодействие клиент-сървър.

Помислете за пример за спестяване документ с електронна таблицада подаде. Необходимо е да създадете и попълните обекта TableDocument по всякакъв начин и разтоварванефайл се прави само с един ред:

TabDoc . Write(FilePath, SpreadsheetDocumentFileType.XLSX);

Тук TabDoc- генерирана електронна таблица, Пътят до файла- името на файла за качване, SpreadsheetDocumentFileType.XLSX- формат създаден файл. Поддържат се следните Excel формати:

TabDoc = Нов документ за електронна таблица;
TabDoc . Read(PathToFile, WayToReadSpreadsheetDocumentValues.Value);

Тук Пътят до файла- Път до изтегления Excel файл. WayToReadValuesSpreadDocument.Valueопределя как да се интерпретират данните, прочетени от изходния документ. Налични опции:

  • Значение;
  • Текст.

Обмен чрез OLE

Обменът чрез OLE технология за автоматизация е може би най-често срещаният вариант програмна работас Excel файлове. Той ви позволява да използвате цялата функционалност, предоставена от Excel, но е по-бавен от другите методи. Обменът чрез OLE изисква MS Excel да бъде инсталиран:

  • На компютъра на крайния потребител, ако обменът се извършва от страна на клиента;
  • На сървърния компютър на 1C:Enterprise, ако обменът се извършва от страната на сървъра.

Пример разтоварване:

// Създаване на COM обект
Excel = Нов COMObject("Excel.Application");
// Деактивиране на предупреждения и въпроси
Excel . displayalerts = невярно;
// Създаване на нова книга
Книга = Excel. работни тетрадки. добави();
// Позициониране на първия лист
Лист = Книга. Работни листове(1);

// Записване на стойност в клетка
Лист . Клетки (номер на ред, номер на колона). Стойност = Стойност на клетката;

// Запазване на файла
Книга . SaveAs(Име на файл);


Excel . Изход();
Excel = 0;

Примери четене:

// -- ОПЦИЯ 1 --

// Създаване на COM обект
Excel = Нов COMObject("Excel.Application");
// Отворена книга
Книга = Excel. работни тетрадки. отворено( Пътят до файла);

Лист = Книга. Работни листове(1);

// Затвори книгата
Книга . Затвори(0);

// Затворете Excel и освободете паметта
Excel . Изход();
Excel = 0;

// —— ВАРИАНТ 2 ——

// Отворена книга
Книга = GetCOMObject( Пътят до файла);
// Позициониране върху желания лист
Лист = Книга. Работни листове(1);

// Прочетете стойността на клетката, обикновено това е мястото, където се намира веригата за байпас на клетката
CellValue = Лист. Клетки (номер на ред, номер на колона). стойност;

// Затвори книгата
Книга . приложение. Qui T();

За Околовръстен пътвсички завършени линии Excel листможете да използвате следните методи:

// -- ОПЦИЯ 1 --
Брой редове = лист. Клетки (1 , 1 ). Специални клетки(11). ред;
За номер на ред = 1 по брой редове цикъл
CellValue = Лист. Клетки (номер на ред, номер на колона). стойност;
EndCycle;

// —— ВАРИАНТ 2 ——
номер на ред = 0;
Докато True Loop
Номер на ред = Номер на ред + 1;
CellValue = Лист. Клетки (номер на ред, номер на колона). стойност;
Ако НЕ е ValueFilled(CellValue) Тогава
прекъсвам;
EndIf;
EndCycle;

Вместо да преминавате последователно през всички редове на листа, можете изхвърлете всички данни в масиви работи с него. Този подход ще бъде по-бърз при четене на голямо количество данни:

Общо колони = лист. Клетки (1 , 1 ). Специални клетки(11). Колона;
Общо редове = Лист. Клетки (1 , 1 ). Специални клетки(11). ред;

Регион = Лист. Диапазон (Лист. Клетки (1 , 1 ), Списък. Клетки (Общо редове, Общо колони));
Данни = Площ. стойност. разтоварвам();

Таблицата по-долу изброява най-търсените свойства и методи за работа с Excel чрез OLE:

Действие Код Коментар
Работа с приложението
Настройка на видимостта на прозореца на приложението Excel . видими= невярно;
Настройка на режима на показване на предупреждение (показване/не показване) Excel . DisplayAlerts= невярно;
Затваряне на приложението Excel . Изход();
Работа с книга
Създайте нова книга Книга = Excel. работни тетрадки. Добавете();
Отваряне на съществуваща работна книга Книга = Excel. работни тетрадки. Отворете (Име на файл);
Запазване на книга Книга . SaveAs(Име на файл);
затваряне на книгата Книга . Затвори(0);
Работа с лист
Настройка на текущия лист Лист = Книга. Работни листове (Номер на лист);
Настройка на име Лист . Име = Име;
Настройка на защита Лист . Защитете();
Премахване на защитата Лист . Премахване на защитата();
Задаване на ориентация на страницата Лист . Настройка на страницата. Ориентация = 2; 1 - портрет, 2 - пейзаж
Задаване на лявата граница Лист . Настройка на страницата. LeftMargin = Excel. Сантиметри до точки (сантиметри);
Задаване на горната граница Лист . Настройка на страницата. TopMargin = Excel. Сантиметри до точки (сантиметри);
Задаване на правилната граница Лист . Настройка на страницата. RightMargin = Excel. Сантиметри до точки (сантиметри);
Задаване на долната граница Лист . Настройка на страницата. BottomMargin = Excel. Сантиметри до точки (сантиметри);
Работа с редове, колони, клетки
Настройка на ширината на колоната Лист . Колони (ColumnNumber). ColumnWidth = Ширина;
Премахване на линия Лист . Редове (Номер на ред). Изтрий();
Изтриване на колона Лист . Колони (ColumnNumber). Изтрий();
Изтриване на клетка Лист . Клетки (номер на ред, номер на колона). Изтрий();
Задаване на стойност Лист . Клетки (номер на ред, номер на колона). Стойност = Стойност;
Сливане на клетки Лист . Диапазон (Лист. Клетки (Номер на ред, Номер на колона), Лист. Клетки (Номер на ред1, Номер на колона1)). Обединяване();
Инсталиране на шрифта Лист . Клетки (номер на ред, номер на колона). Шрифт. Име = Име на шрифта;
Задаване на размера на шрифта Лист . Клетки (номер на ред, номер на колона). Шрифт. Размер = Размер на шрифта;
Настройка на получер шрифт Лист . Клетки (номер на ред, номер на колона). Шрифт. Удебелен = 1 ; 1 - получер, 0 - нормален
Задаване на курсив Лист . Клетки (номер на ред, номер на колона). Шрифт. Курсив = 1 ; 1 - курсив, 0 - нормален
Задаване на подчертан шрифт Лист . Клетки (номер на ред, номер на колона). Шрифт. Подчертайте = 2 ; 2 - подчертано, 1 - не

За да разберете кое свойство трябва да бъде променено или кой метод да извикате, можете да използвате макроси Excel. Ако запишете макрос с необходимите действия, след това можете да видите програмния код във VBA на записания макрос.

Използване на COMSafeArray

Когато разтоварвате големи количества данни от 1C в Excel, можете да използвате обекта за ускоряване COMSafeArray. Както е дефинирано от помощния синтаксис, COMSafeArray е обвивка на обект над многоизмерен масив SafeArrayот COM. Позволява ви да създавате и използвате SafeArray за обмен на данни между COM обекти. Просто казано, това е масив от стойности, които могат да се използват за обмен между приложения, използващи OLE технология.

// Създаване на COMSafeArray
ArrayCom = Нов COMSafeArray("VT_Variant", TotalColumns, TotalRows);
// Попълване на COMSafeArray
За Str = 0 Общо редове - 1 цикъл
За Брой = 0 Общо колони - 1 цикъл
ArrayCom . SetValue(число, Str, стойност);
EndCycle;
EndCycle;
// Задаване на площ на листа екселски стойностиот COMSafeArray
Лист . Диапазон (Лист. Клетки (1 , 1 ), Списък. Клетки (Общо редове, Общо колони)). Стойност = ArrayCom;

Обмен чрез ADO

Един Excel файл, когато се обменя чрез ADO, е база данни, която може да бъде достъпна чрез SQL заявки. Не е необходима инсталация на MS Excel, но е необходим ODBC драйвер, чрез който ще се осъществява достъпът. Използваният ODBC драйвер се определя чрез посочване на низа за свързване към файла. Обикновено необходимият драйвер вече е инсталиран на компютъра.

Обменът чрез ADO е значително по-бърз от обмена чрез OLE, но при разтоварване няма начин да се използва функционалността на Excel за декориране на клетки, маркиране на страници, настройка на формули и т.н.

Пример разтоварване:


Връзка = Нов COMObject("ADODB.Connection");


Съединение . ConnectionString="

|Източник на данни=" + Име на файл + ";
;
Съединение . отворено(); // Отворете връзката

// Създаване на COM обект за командата
Команда = Нов COMObject("ADODB.Command");
Екип

// Присвояване на команден текст за създаване на таблица
Екип . команден текст= „СЪЗДАВАНЕ НА ТАБЛИЦА [Лист1] (Колона1 char(255), Колона2 дата, Колона3 int, Колона4 float)“;
Екип . изпълни(); // Изпълнение на команда

// Присвояване на команден текст за добавяне на ред в таблица
Екип . команден текст= "INSERT INTO [Sheet1] (Column1, Column2, Column3, Column4) стойности ('abvgdeo', '8/11/2017', '12345', '12345,6789')";
Command.Execute(); // Изпълнение на команда

// Изтриване на командата и затваряне на връзката
команда = недефинирана;
Съединение . близо();
Връзка = Недефинирана;

За да създадете нов лист и да оформите неговата структура, можете да използвате обектите ADOX.КаталогИ ADOX.Таблица. В този случай кодът ще изглежда така:

// Създаване на COM обект за работа с книгата
Книга = Нов COMObject("ADOX.Catalog");
Книга . ActiveConnection = Връзка;

// Създаване на COM обект за работа със структурата от данни на листа
Таблица = Нов COMObject("ADOX.Table");
Таблица . Име = "Лист1" ;
Таблица . Колони. Append("Колона1" , 202 );
Таблица . Колони. Append("Column2" , 7 );
Таблица . Колони. Append("Column3" , 5 );
Таблица . Колони. Append("Column4" , 5 );

// Създаване на лист в книгата с описаната структура
Книга . маси. добавяне (таблица);
таблица = недефинирана;
книга = недефиниран;

В горния пример, в метода

Таблица . Колони. Добавете("Колона1", 202);

вторият параметър определя типа колона. Параметърът не е задължителен, ето някои стойности на тип колона:

  • 5-adDouble;
  • 6 - рекламна валута;
  • 7 - adDate;
  • 11 - adBoolean;
  • 202 - adVarWChar;
  • 203-adLongVarWChar.

Пример четене:

// Създайте COM обект за връзката
Връзка = Нов COMObject("ADODB.Connection");

// Задаване на низ за връзка
Съединение . ConnectionString="
|Доставчик=Microsoft.ACE.OLEDB.12.0;
|Източник на данни=" + Име на файл + ";
|Разширени свойства=""Excel 12.0 XML;HDR=ДА"";";
Съединение . отворено(); // Отворете връзката

// Създайте COM обект, за да получите селекция
Избор = Нов COMObject("ADODB.Recordset");
RequestText = „ИЗБЕРЕТЕ * ОТ [Sheet1$]“;

// Изпълнение на заявката
проба . Open(QueryText, Connection);

// Заобикаляне на резултата от селекцията
Докато НЕ взема проби. EOF() цикъл
ColumnValue1 = Избор. полета. Елемент ("Колона1"). стойност ; // Препращане по име на колона
Стойност на колона2 = избор. полета. Елемент(0). стойност; // Извличане по индекс на колона
проба . Преместване на следващия();
EndCycle;

проба . близо();
Проба = недефинирана;
Съединение . близо();
Връзка = недефинирана;

В низа за свързване, параметърът HDRопределя как ще се възприема първият ред на листа. Възможни опции:

  • ДА - първият ред се възприема като имената на колоните. Стойностите могат да бъдат достъпни по име и по индекс на колона.
  • НЕ - Първият ред се приема като данни. Стойностите могат да бъдат достъпни само чрез индекс на колона.

В дадените примери се разглеждат само няколко ADO обекта. Обектният модел ADO се състои от следните обекти:

  • Връзка;
  • команда;
  • набор от записи;
  • запис;
  • полета;
  • поток;
  • грешки;
  • параметри;
  • Имоти.

Качване без програмиране

За да запазите данни от 1C в Excel, не винаги е препоръчително да прибягвате до програмиране. Ако в режим Enterprise потребителят може да покаже данните, необходими за качване, тогава е възможно да ги запишете в Excel без програмиране.

За да запишете документ с електронна таблица (например резултат от отчет), можете да извикате командата Запазванеили Запази като…главно меню.

В прозореца, който се отваря, трябва да изберете директорията, името и формата на записания файл.

За запазване на данни динамични списъци(например списък с артикули) трябва:

  1. Изведете данни в електронна таблица с помощта на командата Още ⇒ Показване на списък...;
  2. Запазете документа с електронната таблица в необходимия формат.

За по-нататъшна работа с данните, получени в документ с електронна таблица от системата 1C от всяка версия, те могат да бъдат запазени във формат xls (x).

Всичко би било наред, но при отваряне в Excel-e, потребителят веднага разбира, че нещо не е наред с таблицата, добре, да, няма етикети на книжни листове. %)

Така беше в 7-та версия на 1C и мигрира към 8-ма, да, има напредък, в 8-ke можете да запазите във формат xlsx, основният формат на последните версии на Excel-i.

За да разрешите проблема, има няколко прости манипулации, първото нещо, което идва на ум за всеки потребител, е да запази отново таблицата в различен формат, но дори и тук няма желания резултат, тогава започваме копиране и поставяне в нова книга Excel.
Има и друга опция, както за напреднали потребители, е да отидете в настройките Excel и в раздела Разширени поставете отметка в квадратчето „Показване на етикети на листове“. Това е правилно, но и рутинно, в светлината на честата обработка на данни, получени от 1C под формата на плоски таблици и по-нататъшен анализ на данни под формата на обобщени таблици и други начини за представяне на данни в Excel.

По същия начин се уморих да тичам по квадратчетата за отметка и реших проблема, ровейки се в интернет, например, и гледайки някои други разработки, се оказа, че внедрява проста (за някои това е акордеон с бутони, за някои това е патерица, но за вкусовете не спорят) механизъм за автоматизация, решаващ проблема с показването на етикетите на листа.

Всичко, от което се нуждаете, е да използвате две свойства на прозореца на Excel:

DisplayWorkbookTabs // флаг за показване на раздели на книжен лист TabRatio // съотношение на ширината на областта на раздела на работната книга към ширината на хоризонталната лента за превъртане на прозореца (като число между 0 (нула) и 1, стойност по подразбиране 0,6)

TabDocument.Write(FullFileName, FileTypeSpreadDocument.XLS); Excel = Нов COMObject("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Visible = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; Пълно име = Excel.ActiveWorkbook.Пълно име; Excel.DisplayAlerts = невярно; Excel.ActiveWorkbook.SaveAs(пълно име, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // ако трябва да работите допълнително с книгата
//Excel.Application.Quit() // ако просто излезем

TabDocument.Write(Пълно име на файл, "XLS"); Excel = CreateObject("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Visible = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; Пълно име = Excel.ActiveWorkbook.Пълно име; Excel.DisplayAlerts = невярно; Excel.ActiveWorkbook.SaveAs(пълно име, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // ако трябва да работите допълнително с книгата
//Excel.Application.Quit() // ако просто излезем