ترفندهایی برای ذخیره یک سند صفحه گسترده در اکسل برای کار بیشتر با آن. ترفندهای ذخیره یک سند صفحه گسترده در اکسل برای کار بیشتر با آن 1c ذخیره یک سند صفحه گسترده در اکسل

این روشساده. ماهیت آن این است که شی سند جدولیروش هایی دارد:

  • بنویس (< ИмяФайла>, < ТипФайлаТаблицы >) برای آپلود داده ها در یک فایل؛
  • خواندن (< ИмяФайла>, < СпособЧтенияЗначений >) برای بارگیری داده ها از یک فایل.

توجه!

متد Write() هم روی کلاینت و هم روی سرور موجود است. متد Read() فقط در سمت سرور موجود است. باید این را به خاطر بسپارید
هنگام برنامه ریزی تعامل مشتری و سرور

بیایید به مثالی از پس انداز نگاه کنیم سند صفحه گستردهبرای تشکیل پرونده باید شی TabularDocument را به هر نحوی ایجاد و پر کرد و تخلیه کردنبه فایل فقط با یک خط انجام می شود:

TabDoc . Write(FilePath، TabularDocumentFileType. XLSX);

اینجا TabDoc- سند صفحه گسترده تولید شده، مسیر فایل- نام فایل برای آپلود، TabularDocumentFileType.XLSX- فرمت فایل ایجاد شده فرمت های Excel زیر پشتیبانی می شوند:

  • XLS95— فرمت اکسل 95;
  • فرمت XLS97 - Excel 97;
  • XLSX یک فرمت اکسل 2007 است.

TabDoc = New TabularDocument;
TabDoc . Read(PathToFile، روش خواندنTabularDocumentValues.Value);

اینجا مسیر فایل- مسیر فایل اکسل دانلود شده روش خواندن مقادیر یک سند جدولی. ارزشتعیین می کند که چگونه داده های خوانده شده از یک سند منبع باید تفسیر شوند. گزینه های موجود:

  • معنی؛
  • متن

تبادل از طریق OLE

تبادل از طریق فناوری اتوماسیون OLE شاید رایج ترین گزینه باشد کار برنامهبا فایل های اکسل. این به شما امکان می دهد از تمام عملکردهای ارائه شده توسط اکسل استفاده کنید، اما در مقایسه با روش های دیگر کندتر است. برای تبادل از طریق OLE، نصب MS Excel مورد نیاز است:

  • در رایانه کاربر نهایی، اگر تبادل در سمت مشتری انجام شود.
  • در رایانه سرور 1C: Enterprise، اگر تبادل در سمت سرور انجام شود.

مثال تخلیه کردن:

// یک شی COM ایجاد کنید
Excel = New COMObject ("Excel.Application");
// هشدارها و سوالات را غیرفعال کنید
برتری داشتن . DisplayAlerts = نادرست.
// یک کتاب جدید بسازید
کتاب = اکسل کتاب های کار اضافه کردن()؛
// موقعیت در اولین برگه
ورق = کتاب کاربرگ (1)؛

// یک مقدار برای یک سلول بنویسید
ورق . سلول ها (شماره ردیف، شماره ستون). مقدار = CellValue;

// فایل را ذخیره کنید
کتاب . SaveAs (نام فایل)؛


برتری داشتن . Quit();
اکسل = 0;

مثال ها خواندن:

// -- انتخاب 1 --

// یک شی COM ایجاد کنید
Excel = New COMObject ("Excel.Application");
// کتابی را باز کنید
کتاب = اکسل کتاب های کار باز کن( مسیر فایل )

ورق = کتاب کاربرگ (1)؛

// بستن کتاب
کتاب . بستن (0);

// اکسل را ببندید و حافظه را آزاد کنید
برتری داشتن . Quit();
اکسل = 0;

// -- گزینه 2 --

// کتابی را باز کنید
کتاب = GetCOMObject( مسیر فایل )
// تعیین موقعیت بر روی برگه مورد نظر
ورق = کتاب کاربرگ (1)؛

// مقدار سلول را بخوانید، معمولاً حلقه پیمایش سلول در اینجا قرار دارد
CellValue = Sheet. سلول ها (شماره ردیف، شماره ستون). ارزش؛

// بستن کتاب
کتاب . کاربرد. Qui t();

برای میان برتمام خطوط تکمیل شده صفحه اکسلاز روش های زیر می توان استفاده کرد:

// -- انتخاب 1 --
تعداد ردیف = برگه. سلول ها (1، 1). سلول های ویژه (11). ردیف؛
برای تعداد ردیف = 1 بر اساس چرخه تعداد ردیف
CellValue = Sheet. سلول ها (شماره ردیف، شماره ستون). ارزش;
چرخه پایان;

// -- گزینه 2 --
تعداد ردیف = 0 ;
در حالی که چرخه حقیقت
RowNumber = RowNumber + 1 ;
CellValue = Sheet. سلول ها (شماره ردیف، شماره ستون). ارزش؛
اگر ValueFilled نیست (CellValue) سپس
سقط
endIf;
چرخه پایان;

به جای اینکه تمام ردیف های برگه را به صورت متوالی طی کنید، می توانید همه داده ها را در یک آرایه تخلیه کنیدو با او کار کنید این رویکرد هنگام خواندن حجم زیادی از داده ها سریعتر خواهد بود:

TotalColumns = Sheet. سلول ها (1، 1). سلول های ویژه (11). ستون؛
TotalRows = برگ سلول ها (1، 1). سلول های ویژه (11). ردیف؛

منطقه = برگ Range(Sheet. Cells(1, 1), Sheet. Cells(TotalRows,TotalColumns));
داده ها = منطقه ارزش. تخلیه کنید();

جدول زیر محبوب ترین ویژگی ها و روش های کار با اکسل از طریق OLE را نشان می دهد:

عمل کد یک نظر
کار با اپلیکیشن
تنظیم نمایان بودن پنجره برنامه برتری داشتن . قابل رویت= نادرست
تنظیم حالت خروجی هشدار (نمایش/عدم نمایش) برتری داشتن . DisplayAlerts= نادرست
بستن برنامه برتری داشتن . Quit();
کار با کتاب
ایجاد یک کتاب جدید کتاب = اکسل کتاب های کار اضافه کردن();
باز کردن یک کتاب کار موجود کتاب = اکسل کتاب های کار Open(FileName);
ذخیره یک کتاب کتاب . SaveAs(نام فایل);
بستن کتاب کتاب . بستن (0);
کار با ورق
تنظیم برگه فعلی ورق = کتاب برگه های کاری (شماره برگ);
تنظیم نام ورق . نام = نام;
راه اندازی حفاظت ورق . محافظت();
حذف حفاظت ورق . UnProtect();
تنظیم جهت صفحه ورق . تنظیمات صفحه. جهت گیری = 2; 1 - پرتره، 2 - منظره
تنظیم حاشیه سمت چپ ورق . تنظیمات صفحه. حاشیه چپ = اکسل. CentimetersToPoints (سانتی متر);
تعیین حد بالایی ورق . تنظیمات صفحه. TopMargin = اکسل. CentimetersToPoints (سانتی متر);
تنظیم حاشیه مناسب ورق . تنظیمات صفحه. RightMargin = اکسل. CentimetersToPoints (سانتی متر);
تعیین حد پایین ورق . تنظیمات صفحه. BottomMargin = Excel. CentimetersToPoints (سانتی متر);
کار با ردیف ها، ستون ها، سلول ها
تنظیم عرض ستون ورق . ستون ها (ColumnNumber). ColumnWidth = عرض;
یک خط را حذف کنید ورق . ردیف (شماره ردیف). حذف();
حذف یک ستون ورق . ستون ها (ColumnNumber). حذف()؛
یک سلول را حذف کنید ورق . سلول ها (شماره ردیف، شماره ستون). حذف();
تنظیم مقدار ورق . سلول ها (شماره ردیف، شماره ستون). ارزش = ارزش;
ادغام سلول ها ورق . محدوده (ورق. سلولها (شماره ردیف، شماره ستون)، ورق. سلولها (شماره ردیف1، شماره ستون1)). ادغام();
تنظیم فونت ورق . سلول ها (شماره ردیف، شماره ستون). فونت Name = FontName;
تنظیم اندازه فونت ورق . سلول ها (شماره ردیف، شماره ستون). فونت اندازه = اندازه قلم;
تنظیم فونت پررنگ ورق . سلول ها (شماره ردیف، شماره ستون). فونت پررنگ = 1 ; 1 - پررنگ، 0 - عادی
تنظیم حروف کج ورق . سلول ها (شماره ردیف، شماره ستون). فونت کج = 1 ; 1 - مورب، 0 - عادی
تنظیم فونت خط دار ورق . سلول ها (شماره ردیف، شماره ستون). فونت زیر خط بکشید = 2 ; 2 - خط دار، 1 - نه

برای اینکه بفهمید کدام ویژگی باید تغییر کند یا کدام روش را فراخوانی کنید، می توانید استفاده کنید ماکروهابرتری داشتن. اگر یک ماکرو با اقدامات لازم ضبط کنید، می‌توانید بعداً آن را تماشا کنید کد برنامهدر ماکرو ضبط شده VBA.

با استفاده از COMSafeArray

هنگام دانلود مقادیر زیادی داده از 1C به اکسل، می توانید از شی برای افزایش سرعت استفاده کنید COMSafeArray. طبق تعریف دستیار نحو، COMSafeArray یک شیء پوشاننده روی یک آرایه چند بعدی است. SafeArrayاز COM. به شما امکان می دهد SafeArray را برای تبادل داده بین اشیاء COM ایجاد و استفاده کنید. به عبارت ساده، آرایه ای از مقادیر است که می تواند برای تبادل بین برنامه ها با استفاده از فناوری OLE استفاده شود.

// COMSafeArray را ایجاد کنید
ArrayCom = New COMSafeArray("VT_Variant"، TotalColumns، TotalRows);
// COMSafeArray را پر کنید
برای صفحه = 0 با مجموع خطوط - 1 چرخه
برای تعداد = 0 ستون کل - 1 چرخه
ArrayCom . SetValue(Count, Page, Value);
چرخه پایان;
چرخه پایان;
// اختصاص یک ناحیه کاربرگ اکسل به مقادیر از COMSafeArray
ورق . محدوده (ورق. سلولها (1، 1)، ورق. سلولها (کل ردیفها، کل ستونها)). مقدار = ArrayCom;

تبادل از طریق ADO

یک فایل اکسل، زمانی که از طریق ADO رد و بدل می شود، پایگاه داده ای است که با استفاده از پرس و جوهای SQL قابل دسترسی است. نصب MS Excel مورد نیاز نیست، اما باید یک درایور ODBC داشته باشید که با آن دسترسی ارائه شود. درایور ODBC مورد استفاده با تعیین رشته اتصال به فایل تعیین می شود. به طور معمول، درایور مورد نیاز از قبل بر روی رایانه نصب شده است.

تبادل از طریق ADO قابل توجه است تبادل سریعتراز طریق OLE، اما هنگام آپلود، هیچ راهی برای استفاده از عملکرد اکسل برای طراحی سلول ها، صفحات طرح بندی، تنظیم فرمول ها و غیره وجود ندارد.

مثال تخلیه کردن:


اتصال = COMObject جدید ("ADODB.Connection");


ترکیب . ConnectionString = "

|منبع داده=" + نام فایل + ";
;
ترکیب . باز کن()؛ // یک اتصال را باز کنید

// یک شی COM برای دستور ایجاد کنید
Command = New COMObject("ADODB.Command");
تیم

// اختصاص متن دستور برای ایجاد جدول
تیم . CommandText = "ایجاد جدول [Sheet1] (Clumn1 char(255)، Column2 date, Column3 int, Column4 float)";
تیم . اجرا کردن()؛ // دستور را اجرا کنید

// اختصاص متن دستور برای افزودن ردیف جدول
تیم . CommandText = "InSERT INTO [Sheet1] (Column1, Column2, Column3, Column4) مقادیر ('abvwhere', '8/11/2017', '12345', '12345,6789')";
Command.Execute(); // دستور را اجرا کنید

// دستور را حذف کرده و اتصال را ببندید
فرمان = تعریف نشده.
ترکیب . بستن();
اتصال = تعریف نشده;

برای ایجاد یک صفحه جدید و شکل دادن به ساختار آن، می توانید از اشیاء استفاده کنید ADOX.کاتالوگو ADOX.Table. در این صورت کد به شکل زیر خواهد بود:

// یک شی COM برای کار با کتاب ایجاد کنید
کتاب = COMObject جدید ("ADOX.Catalog");
کتاب . ActiveConnection = اتصال;

// یک شی COM برای کار با ساختار داده در برگه ایجاد کنید
Table = New COMObject("ADOX.Table");
جدول . نام = "Sheet1" ;
جدول . ستون ها. ضمیمه ("ستون 1"، 202);
جدول . ستون ها. ضمیمه ("ستون 2"، 7);
جدول . ستون ها. ضمیمه ("ستون 3"، 5);
جدول . ستون ها. ضمیمه ("ستون 4"، 5);

// یک برگه با ساختار توصیف شده در کتاب کار ایجاد کنید
کتاب . جداول. ضمیمه (جدول)؛
جدول = تعریف نشده.
کتاب = تعریف نشده;

در مثال بالا، در روش

جدول . ستون ها. اضافه کنید(«ستون 1»، 202);

پارامتر دوم نوع ستون را مشخص می کند. این پارامتر اختیاری است، در اینجا برخی از مقادیر نوع ستون وجود دارد:

  • 5 - adDouble;
  • 6 - ارز تبلیغاتی;
  • 7 - adDate;
  • 11 - adBoolean;
  • 202 - adVarWChar;
  • 203 - adLongVarWChar.

مثال خواندن:

// یک شی COM برای اتصال ایجاد کنید
اتصال = COMObject جدید ("ADODB.Connection");

// رشته اتصال را تنظیم کنید
ترکیب . ConnectionString = "
|Provider=Microsoft.ACE.OLEDB.12.0;
|منبع داده=" + نام فایل + ";
|Extended Properties=""Excel 12.0 XML;HDR=YES"";";
ترکیب . باز کن()؛ // یک اتصال را باز کنید

// یک شی COM برای دریافت انتخاب ایجاد کنید
انتخاب = New COMObject("ADODB.Recordset");
RequestText = "انتخاب * از [Sheet1$]";

// درخواست را اجرا کنید
نمونه . Open(QueryText، Connection)؛

// نتیجه نمونه را دور بزنید
هنوز انتخابی نیست حلقه EOF()
مقدار ستون 1 = انتخاب. زمینه های. مورد ("ستون 1"). ارزش ; // دسترسی با نام ستون
Column2Value = انتخاب. زمینه های. مورد (0). ارزش؛ // دسترسی با فهرست ستون
نمونه . MoveNext();
چرخه پایان;

نمونه . بستن()؛
نمونه = تعریف نشده;
ترکیب . بستن()؛
اتصال = تعریف نشده.

در رشته اتصال پارامتر HDRتعیین می کند که چگونه اولین خط روی برگه درک شود. گزینه های ممکن:

  • بله - خط اول به عنوان نام ستون در نظر گرفته می شود. مقادیر را می توان با نام و نمایه ستون دسترسی داشت.
  • خیر - خط اول به عنوان داده در نظر گرفته می شود. مقادیر فقط با نمایه ستون قابل دسترسی هستند.

این نمونه ها فقط چند شیء ADO را پوشش می دهند. مدل شیء ADO از اشیاء زیر تشکیل شده است:

  • ارتباط؛
  • فرمان؛
  • مجموعه رکوردها
  • رکورد؛
  • زمینه های؛
  • جریان؛
  • خطاها؛
  • مولفه های؛
  • خواص.

بدون برنامه نویسی آپلود کنید

برای ذخیره داده ها از 1C به اکسل، همیشه توصیه نمی شود که به برنامه نویسی متوسل شوید. اگر در حالت Enterprise کاربر بتواند داده های مورد نیاز برای دانلود را نمایش دهد، می توان آنها را بدون برنامه نویسی در اکسل ذخیره کرد.

برای ذخیره یک سند صفحه گسترده (به عنوان مثال، نتیجه یک گزارش)، می توانید دستور را فراخوانی کنید صرفه جویییا ذخیره به عنوان…منوی اصلی.

در پنجره باز شده باید فهرست، نام و فرمت فایل ذخیره شده را انتخاب کنید.

برای ذخیره داده ها لیست های پویا(به عنوان مثال، لیستی از موارد) شما باید:

  1. با استفاده از دستور، داده ها را در یک سند صفحه گسترده خروجی بگیرید بیشتر ⇒ لیست ...;
  2. سند صفحه گسترده را در قالب مورد نیاز ذخیره کنید.

برای کار بیشتربا داده های دریافت شده در یک سند صفحه گسترده از سیستم 1C هر نسخه، می توان آنها را در قالب xls (x) ذخیره کرد.

همه چیز خوب خواهد بود، اما هنگام باز کردن آن در اکسل، کاربر بلافاصله متوجه می شود که مشکلی در جدول وجود دارد، خوب، بله، هیچ میانبری برای برگه های کتاب وجود ندارد. ٪

این مورد در نسخه 7 1C بود و به 8 منتقل شد، بله پیشرفت وجود دارد، در 8 می توانید با فرمت ذخیره کنید xlsx، فرمت بومی آخرین نسخه هابرتری داشتن.

برای حل مشکل چندین دستکاری ساده وجود دارد، اولین چیزی که به ذهن هر کاربری می رسد ذخیره جدول در قالب دیگری است، اما حتی در اینجا نیز نتیجه دلخواه وجود ندارد، سپس شروع به کپی پیست در یک کتاب جدید می کنیم. برتری داشتن.
گزینه دیگری وجود دارد که گویی برای کاربران پیشرفته، رفتن به تنظیمات است اکسل و در قسمت Advanced تیک گزینه Show sheet labels را بزنید. با توجه به پردازش مکرر داده‌های به‌دست‌آمده از 1C در قالب جداول مسطح و تجزیه و تحلیل بیشتر داده‌ها در فرم، صحیح است، اما همچنین معمول است. جداول محوریو روش های دیگر برای ارائه داده ها در اکسل.

من خودم از تیک زدن جعبه ها به همین روش خسته شدم و مثلاً با جستجوی اینترنت مشکل را حل کردم و با نگاهی به برخی پیشرفت های دیگر، موفق شدم یک ساده (برای برخی آکاردئون دکمه ای است، برای برخی دیگر چوب زیر بغل، با این حال، هیچ بحثی در مورد سلیقه وجود ندارد) مکانیزم اتوماسیون حل مشکل با نمایش برچسب های برگه.

تنها کاری که باید انجام دهید این است که از دو ویژگی پنجره اکسل استفاده کنید:

DisplayWorkbookTabs // پرچم برای نمایش برگه های برگه کتاب TabRatio // نسبت عرض ناحیه برگه کتاب کار به عرض نوار افقیاسکرول پنجره (به عنوان یک عدد بین 0 (صفر) و 1، مقدار پیش فرض 0.6)

TabDocument.Write (FullFileName، TabularDocumentFileType.XLS); Excel = New 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(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // اگر نیاز به کار بیشتر با کتاب دارید
//Excel.Application.Quit() //اگر فقط خارج شویم

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(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // اگر نیاز به کار بیشتر با کتاب دارید
//Excel.Application.Quit() //اگر فقط خارج شویم

برای کار بیشتر با داده های دریافت شده در یک سند صفحه گسترده از سیستم 1C هر نسخه، می توان آنها را در قالب xls (x) ذخیره کرد.

همه چیز خوب خواهد بود، اما هنگام باز کردن آن در اکسل، کاربر بلافاصله متوجه می شود که مشکلی در جدول وجود دارد، خوب، بله، هیچ میانبری برای برگه های کتاب وجود ندارد. ٪

این مورد در نسخه 7 1C بود و به 8 منتقل شد، بله پیشرفت وجود دارد، در 8 می توانید با فرمت ذخیره کنید xlsx، فرمت اصلی آخرین نسخه های اکسل.

برای حل مشکل چندین دستکاری ساده وجود دارد، اولین چیزی که به ذهن هر کاربری می رسد ذخیره جدول در قالب دیگری است، اما حتی در اینجا نیز نتیجه دلخواه وجود ندارد، سپس شروع به کپی پیست در یک کتاب جدید می کنیم. برتری داشتن.
گزینه دیگری وجود دارد که گویی برای کاربران پیشرفته، رفتن به تنظیمات است اکسل و در قسمت Advanced تیک گزینه Show sheet labels را بزنید. با توجه به پردازش مکرر داده های به دست آمده از 1C در قالب جداول مسطح و تجزیه و تحلیل بیشتر داده ها در قالب جداول محوری و سایر روش های ارائه داده ها در اکسل، صحیح است، اما همچنین معمول است.

من خودم از تیک زدن جعبه ها به همین روش خسته شدم و مثلاً با جستجوی اینترنت مشکل را حل کردم و با نگاهی به برخی پیشرفت های دیگر، موفق شدم یک ساده (برای برخی آکاردئون دکمه ای است، برای برخی دیگر چوب زیر بغل، با این حال، هیچ بحثی در مورد سلیقه وجود ندارد) مکانیزم اتوماسیون حل مشکل با نمایش برچسب های برگه.

تنها کاری که باید انجام دهید این است که از دو ویژگی پنجره اکسل استفاده کنید:

DisplayWorkbookTabs // نشانگر نمایش برگه‌های برگه کتاب کار TabRatio // نسبت عرض ناحیه برگه‌های کتاب کار به عرض نوار اسکرول افقی پنجره (به عنوان یک عدد بین 0 (صفر) و 1، مقدار پیش‌فرض 0.6)

TabDocument.Write (FullFileName، TabularDocumentFileType.XLS); Excel = New 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(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // اگر نیاز به کار بیشتر با کتاب دارید
//Excel.Application.Quit() //اگر فقط خارج شویم

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(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013 //Excel.Visible = 1; // اگر نیاز به کار بیشتر با کتاب دارید
//Excel.Application.Quit() //اگر فقط خارج شویم

اشتراک گذاری