Trükkök egy táblázatkezelő dokumentum Excelben történő mentéséhez a további munkához. Trükkök a táblázatos dokumentumok Excelben történő mentéséhez a vele való további munkához Táblázatdokumentum programozott mentése Excel 1c-ben

Trükkök egy táblázatkezelő dokumentum Excelben történő mentéséhez a további munkához.  Trükkök a táblázatos dokumentumok Excelben történő mentéséhez a vele való további munkához Táblázatdokumentum programozott mentése Excel 1c-ben
Trükkök egy táblázatkezelő dokumentum Excelben történő mentéséhez a további munkához. Trükkök a táblázatos dokumentumok Excelben történő mentéséhez a vele való további munkához Táblázatdokumentum programozott mentése Excel 1c-ben

Az 1C rendszer bármely verziójának táblázatkezelő dokumentumában kapott adatokkal való további munkához xls (x) formátumban menthetők.

Minden rendben is lenne, de Excel-e-ben megnyitva a felhasználó azonnal megérti, hogy valami nem stimmel a táblázattal, hát igen, nincsenek könyvlapcímkék. %)

Így volt ez az 1C 7. verziójában és vándorolt ​​a 8.-ra, igen, van haladás, a 8-ke-ben lehet menteni formátumban xlsx, natív formátum legújabb verziói Excel i.

A probléma megoldásához számos egyszerű manipuláció van, az első dolog, ami minden felhasználónak eszébe jut, az az, hogy a táblázatot más formátumban újra el kell menteni, de még itt sincs meg a kívánt eredmény, majd elkezdjük a másolást egy új könyvbe. Excel.
Van egy másik lehetőség, mint a haladó felhasználók számára, a beállítások megnyitása Az Excelben, és a Speciális részben jelölje be a „Lapcímkék megjelenítése” négyzetet. Helyes, de rutinszerű is, tekintettel az 1C-ből származó adatok lapos táblázatok formájában történő gyakori feldolgozására és az adatok további elemzésére a formában. pivot táblákés az adatok Excelben való megjelenítésének egyéb módjai.

Ugyanígy belefáradtam a jelölőnégyzeteken való futkározásba, és megoldottam a problémát, például az interneten turkálva, és néhány további fejlesztést nézve kiderült, hogy egy egyszerűt valósítottam meg (van akinek ez egy gombos harmonika, valakinek ez egy mankó, azonban nem vitatkoznak az ízlésről) automatizálási mechanizmus megoldja a problémát a lapcímkék megjelenítésével.

Csak az Excel ablak két tulajdonságát kell használnia:

DisplayWorkbookTabs // jelző a könyvlapfülek megjelenítéséhez TabRatio // a munkafüzet lapterületének szélességének aránya a szélességhez vízszintes sáv ablak görgetése (0 (nulla) és 1 közötti számként, alapértelmezett érték 0,6)

TabDocument.Write(FullFileName, FileTypeSpreadDocument.XLS); Excel = Új COMObject("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Visible = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; FullName = Excel.ActiveWorkbook.FullName; Excel.DisplayAlerts = false; Excel.ActiveWorkbook.SaveAs(TeljesNév, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // ha tovább kell dolgoznia a könyvvel
//Excel.Application.Quit() // ha csak kilépünk

TabDocument.Write(FullFileName, "XLS"); Excel = CreateObject("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Visible = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; FullName = Excel.ActiveWorkbook.FullName; Excel.DisplayAlerts = false; Excel.ActiveWorkbook.SaveAs(TeljesNév, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // ha tovább kell dolgoznia a könyvvel
//Excel.Application.Quit() // ha csak kilépünk

Ez a módszer egyszerű. Lényege, hogy a tárgy SpreadsheetDocument módszerek vannak:

  • éget (< ИмяФайла>, < ТипФайлаТаблицы >) adatok fájlba feltöltése;
  • Olvas (< ИмяФайла>, < СпособЧтенияЗначений >) adatok betöltéséhez egy fájlból.

Figyelem!

A Write() metódus elérhető mind a kliensen, mind a szerveren. A Read() metódus csak a szerver oldalon érhető el. Ezt emlékezni kell
a kliens-szerver interakció tervezésekor.

Vegyünk egy példát a megtakarításra táblázatos dokumentum fájlhoz. A TableDocument objektumot bármilyen módon létre kell hozni és kitölteni, ill kirakodás A fájl csak egy sorból készül:

TabDoc . Write(FilePath, SpreadsheetDocumentFileType.XLSX);

Itt TabDoc- generált táblázat, A fájl elérési útja- a feltöltendő fájl neve, SpreadsheetDocumentFileType.XLSX- formátum létrehozott fájl. A következő Excel formátumok támogatottak:

  • XLS95- excel formátumban 95;
  • XLS97 - Excel 97 formátum;
  • Az XLSX egy Excel 2007 formátum.

TabDoc = New SpreadsheetDocument;
TabDoc . Read(PathToFile, WayToReadSpreadsheetDocumentValues.Value);

Itt A fájl elérési útja- A letöltött Excel fájl elérési útja. WayToReadValuesSpreadDocument.Value meghatározza, hogyan kell értelmezni a forrásdokumentumból kiolvasott adatokat. Választható lehetőségek:

  • Jelentés;
  • Szöveg.

Csere OLE-n keresztül

Az OLE automatizálási technológián keresztüli csere talán a leggyakoribb lehetőség programmunka Val vel Excel fájlok. Lehetővé teszi az Excel által biztosított összes funkció használatát, de lassabb, mint más módszerek. Az OLE-n keresztüli cseréhez az MS Excel telepítése szükséges:

  • A végfelhasználó számítógépén, ha a csere a kliens oldalon történik;
  • Az 1C:Enterprise szerver számítógépen, ha a csere a szerver oldalon történik.

Példa kirakodás:

// Hozzon létre egy COM objektumot
Excel = Új COMObject("Excel.Application");
// Figyelmeztetések és kérdések letiltása
Excel . displayalerts = false;
// Hozzon létre egy új könyvet
Könyv = Excel. munkafüzetek. Add();
// Elhelyezés az első lapon
Lap = Könyv. Munkalapok (1);

// Érték írása a cellába
Lap . Cellák (Sorszám, Oszlopszám). Érték = CellValue;

// Mentse el a fájlt
Könyv . SaveAs(Fájlnév);


Excel . Kilépés();
Excel = 0;

Példák olvasás:

// -- 1.OPCIÓ --

// Hozzon létre egy COM objektumot
Excel = Új COMObject("Excel.Application");
// Nyitott könyv
Könyv = Excel. munkafüzetek. Nyisd ki( a fájl elérési útja );

Lap = Könyv. Munkalapok (1);

// Bezárni a könyvet
Könyv . Bezárás(0);

// Az Excel bezárása és a memória felszabadítása
Excel . Kilépés();
Excel = 0 ;

// —— 2. LEHETŐSÉG ——

// Nyitott könyv
Könyv = GetCOMObject( a fájl elérési útja );
// Elhelyezés a kívánt lapon
Lap = Könyv. Munkalapok (1);

// Olvassa el a cella értékét, általában itt található a cella bypass hurok
CellValue = Lap. Cellák (Sorszám, Oszlopszám). érték;

// Bezárni a könyvet
Könyv . Alkalmazás. Qui t();

Mert kitérő minden befejezett sor Excel lap a következő módszereket használhatja:

// -- 1.OPCIÓ --
Sorok száma = Lap. Sejtek (1, 1). SpecialCells(11 ). Sor;
For RowNumber = 1 Sorok száma szerint Hurok
CellValue = Lap. Cellák (Sorszám, Oszlopszám). érték;
EndCycle;

// —— 2. LEHETŐSÉG ——
Sorszám = 0 ;
Míg a True Loop
LineNumber = Sorszám + 1 ;
CellValue = Lap. Cellák (Sorszám, Oszlopszám). érték;
Ha NEM ValueFilled(CellValue) Akkor
elvetél;
EndIf;
EndCycle;

Ahelyett, hogy egymás után végigmenne a lap összes vonalán, megteheti kiírja az összes adatot egy tömbbeés dolgozz vele. Ez a megközelítés gyorsabb lesz, ha nagy mennyiségű adatot olvas:

TotalColumns = Lap. Sejtek (1, 1). SpecialCells(11 ). Oszlop;
TotalRows = Lap. Sejtek (1, 1). SpecialCells(11 ). Sor;

Vidék = Lap. Tartomány(Lap. Cellák(1 , 1 ), List. Cells(Összes sor, Összes oszlop));
Adat = Régió. érték. kirak();

Az alábbi táblázat felsorolja a legkeresettebb tulajdonságokat és módszereket az Excel OLE-n keresztüli használatához:

Akció Kód Egy komment
Munka az alkalmazással
Alkalmazásablak láthatóságának beállítása Excel . látható= hamis;
A figyelmeztetés megjelenítési módjának beállítása (megjelenítés/nem kijelzés) Excel . Display Alerts= hamis;
Az alkalmazás bezárása Excel . Kilépés();
Munka könyvvel
Hozzon létre egy új könyvet Könyv = Excel. munkafüzetek. Hozzáadás();
Meglévő munkafüzet megnyitása Könyv = Excel. munkafüzetek. Open(Fájlnév);
Könyv mentése Könyv . Mentés másként (Fájlnév);
könyvzárás Könyv . Bezárás(0);
Lappal dolgozni
Az aktuális lap beállítása Lap = Könyv. Munkalapok (SheetNumber);
Névbeállítás Lap . Név = Név;
Védelem beállítása Lap . Védje();
Védelem eltávolítása Lap . Védelem megszüntetése();
Az oldal tájolásának beállítása Lap . Oldal beállítása. Tájolás = 2; 1 - álló, 2 - fekvő
A bal oldali szegély beállítása Lap . Oldal beállítása. LeftMargin = Excel. Centimeters To Points (centiméter);
A felső határ beállítása Lap . Oldal beállítása. TopMargin = Excel. Centimeters To Points (centiméter);
A megfelelő szegély beállítása Lap . Oldal beállítása. RightMargin = Excel. Centimeters To Points (centiméter);
Az alsó határ beállítása Lap . Oldal beállítása. BottomMargin = Excel. Centimeters To Points (centiméter);
Munka sorokkal, oszlopokkal, cellákkal
Az oszlop szélességének beállítása Lap . Oszlopok(Oszlopszám). ColumnWidth = Szélesség;
Egy vonal eltávolítása Lap . Sorok(RowNumber). Töröl();
Oszlop törlése Lap . Oszlopok(Oszlopszám). töröl();
Egy cella törlése Lap . Cellák (Sorszám, Oszlopszám). Töröl();
Érték beállítása Lap . Cellák (Sorszám, Oszlopszám). Érték = Érték;
Cellák egyesítése Lap . Tartomány(Lap. Cellák(Sorszám, Oszlopszám), Lap. Cellák(Sorszám1, Oszlopszám1)). Összeolvad();
A betűtípus telepítése Lap . Cellák (Sorszám, Oszlopszám). Betűtípus. Név = FontName;
A betűméret beállítása Lap . Cellák (Sorszám, Oszlopszám). Betűtípus. Méret = FontSize;
Félkövér betűtípus beállítása Lap . Cellák (Sorszám, Oszlopszám). Betűtípus. Bátor = 1 ; 1 - félkövér, 0 - normál
Dőlt betű beállítása Lap . Cellák (Sorszám, Oszlopszám). Betűtípus. Dőlt = 1 ; 1 - dőlt, 0 - normál
Aláhúzott betűtípus beállítása Lap . Cellák (Sorszám, Oszlopszám). Betűtípus. Aláhúzás = 2 ; 2 - aláhúzva, 1 - nem

Annak érdekében, hogy megtudja, melyik tulajdonságot kell megváltoztatni, vagy melyik metódust kell meghívni, használhatja makrók Excel. Ha rögzít egy makrót a szükséges műveletekkel, akkor a programkódot megtekintheti a rögzített makró VBA-jában.

COMSafeArray használata

Ha nagy mennyiségű adatot tölt ki az 1C-ből az Excelbe, az objektumot felgyorsíthatja COMSafeArray. A szintaktikai segéd meghatározása szerint a COMSafeArray egy többdimenziós tömbön lévő objektumburkoló SafeArray a COM-tól. Lehetővé teszi a SafeArray létrehozását és használatát a COM-objektumok közötti adatcseréhez. Egyszerűen fogalmazva, ez egy olyan értéktömb, amely az OLE technológiát használó alkalmazások közötti cserére használható.

// COMSafeArray létrehozása
ArrayCom = Új COMSafeArray("VT_Variant", TotalColumns, TotalRows);
// A COMSafeArray feltöltése
Mert Str = 0 sor összesen – 1 hurok
Mert Szám = 0 összesen oszlop – 1 ciklus
ArrayCom . SetValue(szám, Str, érték);
EndCycle;
EndCycle;
// Lapterület hozzárendelése excel értékeket a COMSafeArray-ből
Lap . Tartomány(Lap. Cellák(1 , 1 ), List. Cells(Összes sor, Összes oszlop)). Érték = ArrayCom;

Csere ADO-n keresztül

Az ADO-n keresztül cserélt Excel-fájl egy olyan adatbázis, amely SQL-lekérdezésekkel érhető el. Az MS Excel telepítése nem szükséges, de egy ODBC illesztőprogram szükséges, amelyen keresztül történik a hozzáférés. A használt ODBC illesztőprogramot a fájl kapcsolati karakterláncának megadása határozza meg. Általában a szükséges illesztőprogram már telepítve van a számítógépen.

Az ADO-n keresztüli csere észrevehetően gyorsabb, mint az OLE-n keresztüli csere, de kirakodáskor nincs mód az Excel funkcionalitására cellák díszítésére, oldalak jelölésére, képletek beállítására stb.

Példa kirakodás:


Kapcsolat = Új COMObject("ADODB.Kapcsolat");


Összetett . ConnectionString="

|DataSource=" + Fájlnév + ";
;
Összetett . nyisd ki(); // Kapcsolat megnyitása

// Hozzon létre egy COM objektumot a parancshoz
Parancs = Új COMObject("ADODB.Command");
Csapat

// Parancsszöveg hozzárendelése táblázat létrehozásához
Csapat . parancsszöveg= "TÁBLÁZAT LÉTREHOZÁSA [1. lap] (1. oszlop char(255), 2. oszlop dátuma, 3. oszlop int, 4. oszlop lebegés)";
Csapat . végrehajt(); // Parancsvégrehajtás

// Parancsszöveg hozzárendelése táblázatsor hozzáadásához
Csapat . parancsszöveg= "INSERT INTO [Sheet1] (1. oszlop, 2. oszlop, 3. oszlop, 4. oszlop) értékek ('abvgdeo', '2017-08-11', '12345', '12345,6789')";
Command.Execute(); // Parancsvégrehajtás

// A parancs törlése és a kapcsolat bezárása
parancs = undefined;
Összetett . Bezárás();
Kapcsolat = Undefined;

Új lap létrehozásához és szerkezetének kialakításához használhatja az objektumokat ADOX.KatalógusÉs ADOX.Táblázat. Ebben az esetben a kód így fog kinézni:

// Hozzon létre egy COM objektumot a könyvvel való együttműködéshez
Könyv = Új COMObject("ADOX.Katalógus");
Könyv . ActiveConnection = Kapcsolat;

// Hozzon létre egy COM-objektumot, amely a munkalap adatstruktúrájával működik
Táblázat = Új COMObject("ADOX.Tábla");
asztal . Név = "1. lap" ;
asztal . Oszlopok. Append("Oszlop1" , 202 );
asztal . Oszlopok. Append("2. oszlop" , 7 );
asztal . Oszlopok. Append("Oszlop3" , 5 );
asztal . Oszlopok. Append("4. oszlop" , 5 );

// Hozzon létre egy lapot a könyvben a leírt szerkezettel
Könyv . táblázatok. hozzáfűz(tábla);
táblázat = undefined;
könyv = undefined;

A fenti példában a módszerben

asztal . Oszlopok. Mellékel("1. oszlop", 202);

a második paraméter az oszlop típusát adja meg. A paraméter nem kötelező, itt van néhány oszloptípus érték:

  • 5-adDouble;
  • 6 - adCurrency;
  • 7 - addDate;
  • 11 - adBoolean;
  • 202 - adVarWChar;
  • 203-adLongVarWChar.

Példa olvasás:

// Hozzon létre egy COM objektumot a kapcsolathoz
Kapcsolat = Új COMObject("ADODB.Kapcsolat");

// Kapcsolódási karakterlánc beállítása
Összetett . ConnectionString="
|Provider=Microsoft.ACE.OLEDB.12.0;
|DataSource=" + Fájlnév + ";
|Extended Properties=""Excel 12.0 XML;HDR=IGEN"";";
Összetett . nyisd ki(); // Kapcsolat megnyitása

// Hozzon létre egy COM objektumot a kijelölés fogadásához
Kijelölés = Új COMObject("ADODB.Rekordkészlet");
RequestText = "SELECT * FROM [Sheet1$]";

// Hajtsa végre a kérést
Minta . Open(QueryText, Connection);

// A kijelölés eredményének megkerülése
Miközben NEM mintavétel. EOF() Hurok
ColumnValue1 = Kijelölés. mezőket. Item ("1. oszlop"). érték ; // Hivatkozás oszlopnév szerint
2. oszlop értéke = kijelölés. mezőket. Tétel(0 ). érték; // Lekérés oszlopindex alapján
Minta . MoveNext();
EndCycle;

Minta . Bezárás();
Minta = undefined;
Összetett . Bezárás();
Kapcsolat = undefined;

A kapcsolati karakterláncban a paraméter HDR meghatározza, hogy a lap első sora hogyan lesz érzékelve. Lehetséges opciók:

  • IGEN – az első sort az oszlopok neveként érzékeli. Az értékek név és oszlopindex alapján érhetők el.
  • NEM – Az első sor adatnak minősül. Az értékek csak oszlopindex segítségével érhetők el.

A megadott példákban csak néhány ADO objektumot vettünk figyelembe. Az ADO objektummodell a következő objektumokból áll:

  • kapcsolat;
  • parancs;
  • rekordkészlet;
  • rekord;
  • mezők;
  • Folyam;
  • hibák;
  • paraméterek;
  • tulajdonságait.

Feltöltés programozás nélkül

Az adatok 1C-ből Excelbe történő mentéséhez nem mindig tanácsos programozáshoz folyamodni. Ha Vállalati módban a felhasználó meg tudja jeleníteni a feltöltéshez szükséges adatokat, akkor ezek programozás nélkül is elmenthetők Excelbe.

Táblázat-dokumentum (például egy jelentés eredményének) mentéséhez meghívhatja a parancsot Megment vagy Mentés másként… főmenü.

A megnyíló ablakban ki kell választani a mentett fájl könyvtárát, nevét és formátumát.

Az adatok mentéséhez dinamikus listák(például egy cikklista) a következőket kell tennie:

  1. Az adatokat a paranccsal egy táblázatba írja ki Tovább ⇒ Lista megjelenítése...;
  2. Mentse el a táblázatkezelő dokumentumot a kívánt formátumban.

Az 1C rendszer bármely verziójának táblázatkezelő dokumentumában kapott adatokkal való további munkához xls (x) formátumban menthetők.

Minden rendben is lenne, de Excel-e-ben megnyitva a felhasználó azonnal megérti, hogy valami nem stimmel a táblázattal, hát igen, nincsenek könyvlapcímkék. %)

Így volt ez az 1C 7. verziójában és vándorolt ​​a 8.-ra, igen, van haladás, a 8-ke-ben lehet menteni formátumban xlsx, az Excel-i legújabb verzióinak natív formátuma.

A probléma megoldásához számos egyszerű manipuláció van, az első dolog, ami minden felhasználónak eszébe jut, az az, hogy a táblázatot más formátumban újra el kell menteni, de még itt sincs meg a kívánt eredmény, majd elkezdjük a másolást egy új könyvbe. Excel.
Van egy másik lehetőség, mint a haladó felhasználók számára, a beállítások megnyitása Az Excelben, és a Speciális részben jelölje be a „Lapcímkék megjelenítése” négyzetet. Helyes, de egyben rutin is, tekintettel az 1C-től sima táblázatok formájában kapott adatok gyakori feldolgozására, valamint további adatelemzésekre pivot táblák formájában és az adatok Excelben való megjelenítésének egyéb módjaira.

Ugyanígy belefáradtam a jelölőnégyzeteken való futkározásba, és megoldottam a problémát, például az interneten turkálva, és néhány további fejlesztést nézve kiderült, hogy egy egyszerűt valósítottam meg (van akinek ez egy gombos harmonika, valakinek ez egy mankó, azonban nem vitatkoznak az ízlésről) automatizálási mechanizmus megoldja a problémát a lapcímkék megjelenítésével.

Csak az Excel ablak két tulajdonságát kell használnia:

DisplayWorkbookTabs // jelző a könyvlapfülek megjelenítéséhez TabRatio // a munkafüzet lapterületének szélességének és az ablak vízszintes görgetősávjának szélességének aránya (0 (nulla) és 1 közötti számként, alapértelmezett érték 0,6)

TabDocument.Write(FullFileName, FileTypeSpreadDocument.XLS); Excel = Új COMObject("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Visible = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; FullName = Excel.ActiveWorkbook.FullName; Excel.DisplayAlerts = false; Excel.ActiveWorkbook.SaveAs(TeljesNév, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // ha tovább kell dolgoznia a könyvvel
//Excel.Application.Quit() // ha csak kilépünk

TabDocument.Write(FullFileName, "XLS"); Excel = CreateObject("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Visible = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; FullName = Excel.ActiveWorkbook.FullName; Excel.DisplayAlerts = false; Excel.ActiveWorkbook.SaveAs(TeljesNév, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // ha tovább kell dolgoznia a könyvvel
//Excel.Application.Quit() // ha csak kilépünk