1c cum să salvați un document de foaie de calcul în Excel. Trucuri pentru salvarea unui document de foaie de calcul în Excel pentru a lucra în continuare cu acesta. Încărcați fără programare

19.11.2019 Interesant

Pentru a lucra în continuare cu datele primite într-un document de foaie de calcul din sistemul 1C de orice versiune, acestea pot fi salvate în format xls(x).

Totul ar fi bine, dar la deschidere Utilizator Excel-eînțelege imediat că e ceva în neregulă cu masa, ei bine, da, nu există etichete pentru foile cărții. %)

Acesta a fost cazul în a 7-a versiune a 1C și a migrat la a 8-a, da, există progres, în 8 puteți salva în format xlsx, format nativ ultimele versiuni Excela.

Pentru a rezolva problema există mai multe manipulări simple, primul lucru care vine în minte oricărui utilizator este să salveze tabelul într-un alt format, dar nici aici nu există rezultatul dorit, apoi începem să facem copy-paste într-o nouă carte Excela.
Există o altă opțiune, ca și cum ar fi pentru utilizatorii avansați, - aceasta este să mergeți la setări Excel și în secțiunea Avansat, bifați caseta „Afișați etichetele foilor”. Este corect, dar este și de rutină, având în vedere procesarea frecventă a datelor obținute din 1C sub formă de tabele plate și analiza ulterioară a datelor sub formă tabele pivotși alte moduri de a prezenta date în Excel.

Eu însumi m-am săturat să bifez căsuțe în același mod și am rezolvat problema răscolind pe internet, de exemplu, și uitându-mă la alte evoluții, am reușit să implementez un simplu (pentru unii este un acordeon cu butoane, pentru alții o cârjă, cu toate acestea, nu există nicio ceartă în privința gusturilor) mecanism de automatizare Rezolvarea problemei cu afișarea etichetelor de foi.

Tot ce trebuie să faceți este să utilizați două proprietăți ale ferestrei Excel:

DisplayWorkbookTabs // steag pentru afișarea marcajelor din foile de carte TabRatio // raportul lățimii zonei de marcaj registrul de lucru la lățimea barei de derulare orizontale a ferestrei (ca număr între 0 (zero) și 1, valoarea implicită 0,6)

TabDocument.Write(FullFileName, TabularDocumentFileType.XLS); Excel = New COMObject ("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Vizibil = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; FullName = Excel.ActiveWorkbook.FullName; Excel.DisplayAlerts = false; Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // dacă trebuie să lucrați mai departe cu cartea
//Excel.Application.Quit() //dacă doar ieșim

TabDocument.Write(FullFileName, „XLS”); Excel = CreateObject("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Vizibil = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; FullName = Excel.ActiveWorkbook.FullName; Excel.DisplayAlerts = false; Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // dacă trebuie să lucrați mai departe cu cartea
//Excel.Application.Quit() //dacă doar ieșim

Pentru a lucra în continuare cu datele primite într-un document de foaie de calcul din sistemul 1C de orice versiune, acestea pot fi salvate în format xls(x).

Totul ar fi bine, dar când îl deschide în Excel, utilizatorul înțelege imediat că este ceva în neregulă cu tabelul, ei bine, da, nu există comenzi rapide către foile cărții. %)

Acesta a fost cazul în a 7-a versiune a 1C și a migrat la a 8-a, da, există progres, în 8 puteți salva în format xlsx, formatul nativ al celor mai recente versiuni de Excel.

Pentru a rezolva problema există mai multe manipulări simple, primul lucru care vine în minte oricărui utilizator este să salveze tabelul într-un alt format, dar nici aici nu există rezultatul dorit, apoi începem să facem copy-paste într-o nouă carte Excela.
Există o altă opțiune, ca și cum ar fi pentru utilizatorii avansați, - aceasta este să mergeți la setări Excel și în secțiunea Avansat, bifați caseta „Afișați etichetele foilor”. Este corect, dar este și de rutină, având în vedere procesarea frecventă a datelor obținute din 1C sub formă de tabele plate și analiza ulterioară a datelor sub formă de tabele pivot și alte moduri de prezentare a datelor în Excel.

Eu însumi m-am săturat să bifez căsuțe în același mod și am rezolvat problema răscolind pe internet, de exemplu, și uitându-mă la alte evoluții, am reușit să implementez un simplu (pentru unii este un acordeon cu butoane, pentru alții o cârjă, cu toate acestea, nu există nicio ceartă în privința gusturilor) mecanism de automatizare Rezolvarea problemei cu afișarea etichetelor de foi.

Tot ce trebuie să faceți este să utilizați două proprietăți ale ferestrei Excel:

DisplayWorkbookTabs // indicator pentru afișarea filelor din registrul de lucru TabRatio // raportul dintre lățimea zonei file registrului de lucru și lățimea barei de defilare orizontală a ferestrei (ca număr între 0 (zero) și 1, valoarea implicită 0,6)

TabDocument.Write(FullFileName, TabularDocumentFileType.XLS); Excel = New COMObject ("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Vizibil = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; FullName = Excel.ActiveWorkbook.FullName; Excel.DisplayAlerts = false; Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // dacă trebuie să lucrați mai departe cu cartea
//Excel.Application.Quit() //dacă doar ieșim

TabDocument.Write(FullFileName, „XLS”); Excel = CreateObject("Excel.Application"); Excel.WorkBooks.Open(FullFileName); Excel.Vizibil = 0; Excel.ActiveWindow.DisplayWorkbookTabs = 1; Excel.ActiveWindow.TabRatio = 0,6; FullName = Excel.ActiveWorkbook.FullName; Excel.DisplayAlerts = false; Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // dacă trebuie să lucrați mai departe cu cartea
//Excel.Application.Quit() //dacă doar ieșim

Această metodă este simplă. Esența sa este că obiectul TabularDocument are metode:

  • Scrie (< ИмяФайла>, < ТипФайлаТаблицы >) pentru a încărca date într-un fișier;
  • Citit (< ИмяФайла>, < СпособЧтенияЗначений >) pentru a încărca date dintr-un fișier.

Atenţie!

Metoda Write() este disponibilă atât pe client, cât și pe server. Metoda Read() este disponibilă numai pe partea serverului. Trebuie să ne amintim asta
atunci când planificați interacțiunea client-server.

Să ne uităm la un exemplu de economisire document foaie de calcul la dosar. Este necesar să creați și să completați obiectul TabularDocument în orice mod și descărcare la fișier se face doar cu o singură linie:

TabDoc . Scriere(FilePath, TabularDocumentFileType. XLSX);

Aici TabDoc- document foaie de calcul generat, Calea către fișier— numele fișierului de încărcat, TabularDocumentFileType.XLSX— formatul fișierului creat. Sunt acceptate următoarele formate Excel:

  • XLS95— format Excel 95;
  • XLS97 - format Excel 97;
  • XLSX este un format Excel 2007.

TabDoc = New TabularDocument;
TabDoc . Read(PathToFile, Metoda de citireTabularDocumentValues.Value);

Aici Calea către fișier— calea către fișierul Excel descărcat. Metoda de citire a valorilor unui document tabelar.Valoare determină modul în care ar trebui interpretate datele citite dintr-un document sursă. Optiuni Disponibile:

  • Sens;
  • Text.

Schimb prin OLE

Schimbul prin tehnologia de automatizare OLE este poate cea mai comună opțiune program de lucru Cu Fișiere Excel. Vă permite să utilizați toate funcționalitățile oferite de Excel, dar diferă viteza mica lucru în comparație cu alte metode. Pentru a schimba prin OLE, este necesară instalarea MS Excel:

  • Pe computerul utilizatorului final, dacă schimbul are loc pe partea clientului;
  • Pe computerul server 1C:Enterprise, dacă schimbul are loc pe partea de server.

Exemplu descărcare:

// Creați un obiect COM
Excel = New COMObject ("Excel.Application");
// Dezactivează avertismentele și întrebările
excela . DisplayAlerts = Fals;
// Creați o carte nouă
Carte = Excel. Cărți de lucru. Adăuga();
// Poziție pe prima foaie
Foaie = Carte. Fișe de lucru(1);

// Scrieți o valoare într-o celulă
Foaie . Celule (RowNumber, ColumnNumber). Valoare = CellValue;

// Salvați fișierul
Carte . Salvare ca(FileName);


excela . Părăsi();
Excel = 0;

Exemple citind:

// -- OPȚIUNEA 1 --

// Creați un obiect COM
Excel = New COMObject ("Excel.Application");
// Deschide o carte
Carte = Excel. Caiete de lucru. Deschis( Calea către fișier);

Foaie = Carte. Fișe de lucru(1);

// Închiderea cărții
Carte . Închidere(0);

// Închideți Excel și eliberați memorie
excela . Părăsi();
Excel = 0;

// —— OPȚIUNEA 2 ——

// Deschide o carte
Carte = GetCOMObject( Calea către fișier);
// Poziționare pe foaia dreapta
Foaie = Carte. Fișe de lucru(1);

// Citiți valoarea celulei, de obicei bucla de traversare a celulei este localizată aici
CellValue = Foaie. Celule (RowNumber, ColumnNumber). Valoare;

// Închiderea cărții
Carte . Aplicație. Qui t();

Pentru ocolire toate liniile completate Foaie Excel Se pot folosi următoarele metode:

// -- OPȚIUNEA 1 --
Număr de rânduri = foaie. Celule (1, 1). SpecialCells(11). Rând;
Pentru RowNumber = 1 după numărul de rânduri ciclu
CellValue = Foaie. Celule (RowNumber, ColumnNumber). Valoare;
EndCycle;

// —— OPȚIUNEA 2 ——
RowNumber = 0 ;
În timp ce Ciclul Adevărului
RowNumber = RowNumber + 1 ;
CellValue = Foaie. Celule (RowNumber, ColumnNumber). Valoare;
Dacă NU este completată Valoare(ValoareCelulă) Apoi
Avorta;
endIf;
EndCycle;

În loc să parcurgeți secvențial toate rândurile foii, puteți aruncați toate datele într-o matriceși lucrează cu el. Această abordare va fi mai rapidă atunci când citiți o cantitate mare de date:

TotalColumns = Foaie. Celule (1, 1). SpecialCells(11). Coloană;
TotalRows = Frunza. Celule (1, 1). SpecialCells(11). Rând;

Regiune = Frunza. Interval(Sheet. Cells(1, 1), Sheet. Cells(TotalRows,TotalColumns));
Date = Regiunea. Valoare. Descărca();

Tabelul de mai jos prezintă cele mai populare proprietăți și metode de lucru cu Excel prin OLE:

Acțiune Cod Un comentariu
Lucrul cu aplicația
Setarea vizibilității ferestrei aplicației excela . Vizibil= fals;
Setarea modului de ieșire de avertizare (afișare/nu afișare) excela . Afișează Alerte= fals;
Închiderea aplicației excela . Părăsi();
Lucrul cu o carte
Crearea unei cărți noi Carte = Excel. Cărți de lucru. Adăuga();
Deschiderea unui registru de lucru existent Carte = Excel. Cărți de lucru. Deschide (Nume fișier);
Salvarea unei cărți Carte . Salvare ca(FileName);
Închiderea cărții Carte . Închidere(0);
Lucrul cu o foaie
Setarea foii curente Foaie = Carte. Foi de lucru (SheetNumber);
Setarea numelui Foaie . Nume = Nume;
Configurarea protecției Foaie . Proteja();
Îndepărtarea protecției Foaie . Deprotejează();
Setarea orientării paginii Foaie . Configurare pagina. Orientare = 2; 1 - portret, 2 - peisaj
Setarea marginii din stânga Foaie . Configurare pagina. LeftMargin = Excel. CentimetersToPoints(Centimetri);
Stabilirea limitei superioare Foaie . Configurare pagina. TopMargin = Excel. CentimetersToPoints(Centimetri);
Setarea chenarului drept Foaie . Configurare pagina. RightMargin = Excel. CentimetersToPoints(Centimetri);
Setarea limitei inferioare Foaie . Configurare pagina. BottomMargin = Excel. CentimetersToPoints(Centimetri);
Lucrul cu rânduri, coloane, celule
Setarea lățimii coloanei Foaie . Coloane(ColumnNumber). ColumnWidth = Lățime;
Ștergeți o linie Foaie . Rânduri (RowNumber). Șterge();
Eliminarea unei coloane Foaie . Coloane(ColumnNumber). Șterge();
Șterge o celulă Foaie . Celule (RowNumber, ColumnNumber). Șterge();
Setarea valorii Foaie . Celule (RowNumber, ColumnNumber). Valoare = Valoare;
Unirea celulelor Foaie . Interval(Sheet. Cells(RowNumber, ColumnNumber), Sheet. Cells(RowNumber1, ColumnNumber1)). Combina();
Setarea fontului Foaie . Celule (RowNumber, ColumnNumber). Font. Nume = FontName;
Setarea dimensiunii fontului Foaie . Celule (RowNumber, ColumnNumber). Font. Dimensiune = Dimensiunea fontului;
Setarea fontului aldine Foaie . Celule (RowNumber, ColumnNumber). Font. Îndrăzneţ = 1 ; 1 — font aldine, 0 — normal
Setarea cursivelor Foaie . Celule (RowNumber, ColumnNumber). Font. Cursiv = 1 ; 1 - cursiv, 0 - normal
Setarea fontului subliniat Foaie . Celule (RowNumber, ColumnNumber). Font. Subliniați = 2 ; 2 - subliniat, 1 - nu

Pentru a afla ce proprietate trebuie schimbată sau ce metodă să apelați, puteți utiliza macro-uri Excela. Dacă înregistrați o macrocomandă cu acțiunile necesare, atunci puteți consulta codul VBA al macrocomenzii înregistrate.

Folosind COMSafeArray

Când descărcați cantități mari de date din 1C în Excel, puteți utiliza obiectul pentru a accelera COMSafeArray. Conform definiției din asistentul de sintaxă, COMSafeArray este un înveliș de obiecte peste matrice multidimensională SafeArray de la COM. Vă permite să creați și să utilizați SafeArray pentru schimbul de date între obiectele COM. Mai simplu spus, este o serie de valori care pot fi folosite pentru a face schimb între aplicații care utilizează tehnologia OLE.

// Creați COMSafeArray
ArrayCom = New COMSafeArray ("VT_Variant", TotalColumns, TotalRows);
// Completați COMSafeArray
Pentru Pagina = 0 prin TotalLines - 1 ciclu
Pentru Număr = 0 total coloane - 1 ciclu
ArrayCom . SetValue(Număr, pagină, valoare);
EndCycle;
EndCycle;
// Atribuire la zona foii valori Excel de la COMSafeArray
Foaie . Interval(Foaie. Celule(1, 1), Foaia. Celule(TotalRânduri,TotalColumns)). Valoare = ArrayCom;

Schimb prin ADO

Un fișier Excel, atunci când este schimbat prin ADO, este o bază de date care poate fi accesată folosind interogări SQL. Instalarea MS Excel nu este necesară, dar trebuie să aveți un driver ODBC cu care va fi asigurat accesul. Driverul ODBC utilizat este determinat prin specificarea șirului de conexiune la fișier. De obicei, driverul necesar este deja instalat pe computer.

Schimbul prin ADO este considerabil mai rapid decât schimbul prin OLE, dar la încărcare, nu este posibil să utilizați funcționalitatea Excel pentru proiectarea celulelor, aranjarea paginilor, setarea formulelor etc.

Exemplu descărcare:


Conexiune = New COMObject("ADODB.Connection");


Compus . ConnectionString = "

|Sursa de date=" + FileName + ";
;
Compus . Deschis(); // Deschide o conexiune

// Creați un obiect COM pentru comandă
Comanda = New COMObject("ADODB.Command");
Echipă

// Atribuirea textului comenzii pentru a crea un tabel
Echipă . CommandText = „CREATE TABLE [Sheet1] (Column1 char(255), Column2 date, Column3 int, Column4 float)”;
Echipă . A executa(); // Executați comanda

// Atribuirea textului de comandă pentru a adăuga un rând de tabel
Echipă . CommandText = „INSERT INTO [Sheet1] (Column1, Column2, Column3, Column4) valori ('abvwhere', '8/11/2017', '12345', '12345,6789')";
Command.Execute(); // Executați comanda

// Eliminați comanda și închideți conexiunea
Comanda = nedefinit;
Compus . Închide();
Conexiune = nedefinit;

Pentru a crea o foaie nouă și a-i forma structura, puteți folosi obiecte ADOX.CatalogȘi ADOX.Tabel. În acest caz, codul va arăta astfel:

// Creați un obiect COM pentru lucrul cu cartea
Carte = New COMObject("ADOX.Catalog");
Carte . ActiveConnection = Conexiune;

// Creați un obiect COM pentru a lucra cu structura de date de pe foaie
Table = New COMObject("ADOX.Table");
Masa . Nume = "Sheet1" ;
Masa . Coloane. Append(„Coloana1”, 202);
Masa . Coloane. Append(„Coloana2”, 7);
Masa . Coloane. Append(„Coloana3”, 5);
Masa . Coloane. Append(„Coloana4”, 5);

// Creați o foaie cu structura descrisă în registrul de lucru
Carte . Mese. Adăugați(Tabel);
Tabel = nedefinit;
Carte = nedefinit;

În exemplul de mai sus, în metoda

Masa . Coloane. Adăuga(„Coloana1”, 202);

al doilea parametru specifică tipul coloanei. Parametrul este opțional, iată câteva valori ale tipului de coloană:

  • 5 - adubla;
  • 6 - adCurrency;
  • 7 - adDate;
  • 11 - adBoolean;
  • 202 - adVarWChar;
  • 203 - adLongVarWChar.

Exemplu citind:

// Creați un obiect COM pentru conexiune
Conexiune = New COMObject("ADODB.Connection");

// Setați șirul de conexiune
Compus . ConnectionString = "
|Furnizor=Microsoft.ACE.OLEDB.12.0;
|Sursa de date=" + FileName + ";
|Extended Properties=""Excel 12.0 XML;HDR=YES"";";
Compus . Deschis(); // Deschide o conexiune

// Creați un obiect COM pentru a primi selecția
Select = New COMObject("ADODB.Recordset");
RequestText = „SELECTARE * DIN [Sheet1$]”;

// Execută cererea
Probă . Deschide (Text Interogare, Conexiune);

// Ocoliți rezultatul eșantionului
Nu este încă o selecție. Bucla EOF().
Valoarea coloanei 1 = Selecție. Câmpuri. Item(„Coloana1”). Valoare ; // Acces după numele coloanei
Column2Value = Selecție. Câmpuri. Articol(0). Valoare; // Acces prin indexul coloanei
Probă . MoveNext();
EndCycle;

Probă . Închide();
Eșantion = nedefinit;
Compus . Închide();
Conexiune = nedefinit;

În șirul de conexiune parametrul HDR determină modul în care va fi percepută prima linie de pe foaie. Opțiuni posibile:

  • DA - prima linie este tratată ca nume de coloane. Valorile pot fi accesate după nume și indexul coloanei.
  • NU - prima linie este tratată ca date. Valorile pot fi accesate numai prin indexul coloanei.

Aceste exemple acoperă doar câteva obiecte ADO. Modelul obiect ADO constă din următoarele obiecte:

  • conexiune;
  • Comanda;
  • set de înregistrări;
  • Record;
  • Câmpuri;
  • Curent;
  • erori;
  • parametrii;
  • Proprietăți.

Încărcați fără programare

Pentru a salva datele din 1C în Excel, nu este întotdeauna recomandabil să recurgeți la programare. Dacă în modul Enterprise utilizatorul poate afișa datele necesare pentru descărcare, atunci acestea pot fi salvate în Excel fără programare.

Pentru a salva un document de foaie de calcul (de exemplu, rezultatul unui raport), puteți apela comanda Salvați sau Salvează ca… meniu principal.

În fereastra care se deschide, trebuie să selectați directorul, numele și formatul fișierului salvat.

Pentru a salva date din liste dinamice (de exemplu, o listă de articole), trebuie să:

  1. Trimiteți date într-un document de foaie de calcul folosind comanda Mai multe ⇒ Lista...;
  2. Salvați documentul foaie de calcul în formatul necesar.