PowerShell و Excel: استغل قوة ImportExcel

مايكروسوفت إكسل هو أحد تلك الأدوات الشائعة التي لا يمكن لمعظمنا الهروب منها حتى لو حاولنا. يستخدم العديد من المحترفين في تكنولوجيا المعلومات إكسل كقاعدة بيانات صغيرة تخزن الكثير من البيانات في سيناريوهات التشغيل التلقائي المختلفة. ما هو أفضل سيناريو للتشغيل التلقائي وإكسل؟ باوشرشيل وإكسل!

لطالما كانت جداول إكسل صعبة البرمجة والتشغيل التلقائي. على عكس نظيرها المبسط (والأقل ميزاتًا) ملف CSV ، فإن مصنفات إكسل ليست مجرد ملفات نصية بسيطة. تتطلب مصنفات إكسل باستخدام باوشرشيل للتلاعب بكائنات نموذج الكائنات المركبة (COM) المعقدة ، وبالتالي يجب أن يكون لديك إكسل مثبتًا. لم يعد الأمر كذلك.

ولحسن الحظ ، أنشأ أحد أعضاء مجتمع باوشرشيل الذكي ، دوغ فينكي ، وحدة باوشرشيل تسمى استيراد إكسل للموتالينا. تجريد وحدة استيراد إكسل كل تلك التعقيدات. يجعل من الممكن إدارة سهلة لمصنفات إكسل والانتقال إلى برمجة باوشرشيل!

في هذه المقالة ، دعنا نستكشف ما يمكنك القيام به مع باوشرشيل وإكسل باستخدام وحدة استيراد إكسل وبعض الحالات الاستخدام الشائعة.

المتطلبات الأساسية

عند تشغيل وحدة ImportExcel على نظام Windows، لا تحتاج إلى تثبيت تبعيات منفصلة. ومع ذلك، إذا كنت تعمل على نظام macOS، ستحتاج إلى تثبيت حزمة mono-libgdiplus باستخدام brew install mono-libgdiplus. سيتم بناء جميع الأمثلة في هذا المقال باستخدام macOS ولكن يجب أن تعمل جميع الأمثلة على الأنظمة المتعددة.

إذا كنت تستخدم macOS، تأكد من إعادة تشغيل جلسة PowerShell الخاصة بك قبل المتابعة.

تثبيت وحدة ImportExcel

ابدأ بتنزيل وتثبيت الوحدة عبر PowerShell Gallery باستخدام Install-Module ImportExcel -Scope CurrentUser. بعد لحظات قليلة، ستكون جاهزًا للاستخدام.

استخدام PowerShell وExcel لتصدير إلى ورقة عمل

قد تكون على دراية بأمرين الـ PowerShell القياسيين Export-Csv و Import-Csv. تتيح لك هذه الأوامر قراءة وتصدير كائنات PowerShell إلى ملفات CSV. للأسف، ليس هناك أوامر Export-Excel و Import-Excel. ولكن باستخدام وحدة ImportExcel، يمكنك بناء وظائف خاصة بك بسهولة.

إحدى أكثر الطلبات شيوعًا التي يطلبها مسؤول النظام هي تصدير كائنات PowerShell إلى ورقة عمل Excel. باستخدام أمر Export-Excel في وحدة ImportExcel، يمكنك بسهولة تحقيق ذلك.

على سبيل المثال، ربما تحتاج إلى العثور على بعض العمليات التي تعمل على جهاز الكمبيوتر المحلي الخاص بك وتضمينها في جدول بيانات Excel.

يقبل أمر Export-Excel أي كائن بالضبط بنفس الطريقة التي يفعل فيها أمر Export-Csv. يمكنك توجيه أي نوع من الكائنات إلى هذا الأمر.

للعثور على العمليات التي تعمل على نظام باستخدام PowerShell، استخدم أمر Get-Process الذي يُرجع كل عملية تعمل ومعلومات متعددة حول كل عملية. لتصدير تلك المعلومات إلى Excel، استخدم أمر Export-Excel مع توفير مسار الملف إلى جدول بيانات Excel الذي سيتم إنشاؤه. يمكنك رؤية مثال على الأمر ولقطة شاشة لملف Excel المُنشأ أدناه.

Get-Process | Export-Excel -Path './processes.xlsx'
Worksheet created with PowerShell and Excel

تهانينا! لقد قمت الآن بتصدير جميع المعلومات تمامًا مثل Export-Csv ولكن، على عكس Export-Csv، يمكننا جعل هذه البيانات أكثر تفردًا بكثير. دعونا نتأكد من أن اسم ورقة العمل يُسمى العمليات، وأن البيانات في جدول وأن الصفوف مُحجمة تلقائيًا.

باستخدام مفتاح التبديل AutoSize لتحجيم جميع الصفوف، TableName لتحديد اسم الجدول الذي سيتضمن جميع البيانات، واسم معامل WorksheetName لـ Processes، يمكنك أن ترى في اللقطة أدناه ما يمكن بناؤه.

Get-Process | Export-Excel -Path './processes.xlsx' -AutoSize -TableName Processes -WorksheetName Proccesses
Autosize Switch Parameter Result

يحتوي cmdlet Export-Excel على العديد من المعاملات التي يمكنك استخدامها لإنشاء سجلات Excel من جميع الأنواع. للحصول على نظرة شاملة على كل ما يمكن Export-Excel فعله، قم بتشغيل Get-Help Export-Excel.

استخدام PowerShell للاستيراد إلى Excel

لقد قمت بتصدير بعض المعلومات إلى ملف يسمى processes.xlsx في القسم السابق. ربما الآن تحتاج إلى نقل هذا الملف إلى جهاز كمبيوتر آخر واستيراد/قراءة هذه المعلومات باستخدام PowerShell وExcel. ليس هناك أي مشكلة. لديك Import-Excel في تصرفك.

في استخدامه الأساسي، تحتاج فقط إلى توفير مسار الوثيقة/العمل في Excel باستخدام معامل Path كما هو موضح أدناه. سترى أنه يقرأ الورقة الأولى، في هذه الحالة، ورقة Processes، ويعيد كائنات PowerShell.

Import-Excel -Path './processes.xlsx'
Path Parameter

ربما لديك العديد من الأوراق في دفتر عمل Excel؟ يمكنك قراءة ورقة عمل معينة باستخدام معامل WorksheetName.

Import-Excel -Path './processes.xlsx' -WorkSheetname SecondWorksheet

هل تحتاج إلى قراءة أعمدة معينة فقط من ورقة العمل في Excel؟ استخدم معامل HeaderName لتحديد فقط تلك المعلمات التي ترغب في قراءتها.

Import-Excel -Path './processes.xlsx' -WorkSheetname Processes -HeaderName 'CPU','Handle'

يمتلك cmdlet Import-Excel معلمات أخرى يمكنك استخدامها لقراءة مصنفات Excel من جميع الأنواع. للحصول على نظرة شاملة حول كل ما يمكن Import-Excel القيام به، قم بتشغيل Get-Help Import-Excel.

استخدام PowerShell للحصول (وتعيين) قيم خلايا Excel

أنت الآن تعرف كيفية قراءة ورقة عمل كاملة باستخدام PowerShell و Excel ولكن ماذا لو كنت بحاجة فقط إلى قيمة خلية واحدة؟ من الناحية التقنية، يمكنك استخدام Import-Excel وتصفية القيمة التي تحتاجها باستخدام Where-Object ولكن ذلك لن يكون فعالًا جدًا.

بدلاً من ذلك، باستخدام cmdlet Open-ExcelPackage، يمكنك “تحويل” مصنف Excel إلى كائن PowerShell يمكن قراءته وتلاعبه. للعثور على قيمة خلية، يتعين عليك أولاً فتح مصنف Excel لجلبه إلى الذاكرة.

$excel = Open-ExcelPackage -Path './processes.xlsx'

تشبه cmdlet Open-ExcelPackage استخدام New-Object -comobject excel.application إذا كنت تعمل مباشرةً مع كائنات COM.

بعد ذلك، اختر ورقة العمل داخل المصنف.

$worksheet = $excel.Workbook.Worksheets['Processes']

هذه العملية مشابهة لطريقة كائنات COM في فتح مصنفات العمل باستخدام excel.workbooks.open.

بمجرد الحصول على ورقة العمل المخصصة إلى متغير، يمكنك الآن الوصول إلى الصفوف والأعمدة والخلايا الفردية. ربما تحتاج إلى العثور على جميع قيم الخلية في الصف A1. كل ما عليك فعله هو الإشارة إلى خاصية Cells وتقديم فهرس لـ A1 كما هو موضح أدناه.

$worksheet.Cells['A1'].Value

يمكنك أيضًا تغيير قيم الخلايا في ورقة عمل عن طريق تعيين قيمة مختلفة على سبيل المثال. $worksheet.Cells['A1'] = 'قيمة مختلفة'

بمجرد تخزينها في الذاكرة، من المهم إطلاق حزمة Excel باستخدام سطر الأوامر Close-ExcelPackage.

Close-ExcelPackage $excel

تحويل ورقات العمل إلى ملفات CSV باستخدام PowerShell وExcel

بمجرد الحصول على محتويات ورقة العمل في Excel ممثلة عبر كائنات PowerShell، فإن “تحويل” ورقات العمل في Excel إلى CSV يتطلب ببساطة إرسال تلك الكائنات إلى سطر الأوامر Export-Csv.

باستخدام ورقة العمل processes.xlsx التي تم إنشاؤها سابقًا، اقرأ الورقة العمل الأولى التي تحصل على جميع البيانات في كائنات PowerShell، ثم قم بتصدير تلك الكائنات إلى CSV باستخدام الأمر أدناه.

Import-Excel './processes.xlsx' | Export-Csv -Path './processes.csv' -NoTypeInformation

إذا فتحت الآن ملف CSV الناتج، سترى نفس البيانات داخل ورقة العمل Processes (في هذا المثال).

تحويل ورقات العمل المتعددة

إذا كان لديك مصنف Excel مع عدة ورقات عمل، يمكنك أيضًا إنشاء ملف CSV لكل ورقة عمل. للقيام بذلك، يمكنك العثور على جميع الأوراق في مصنف باستخدام سطر الأوامر Get-ExcelSheetInfo. بمجرد الحصول على أسماء الورقات العمل، يمكنك بعد ذلك تمرير تلك الأسماء إلى معلمة WorksheetName واستخدام اسم الورقة أيضًا كاسم لملف CSV.

أدناه يمكنك العثور على الشيفرة المطلوبة مع مثال باستخدام PowerShell وExcel.

## العثور على كل ورقة في دفتر العمل
$sheets = (Get-ExcelSheetInfo -Path './processes.xlsx').Name
## قراءة كل ورقة وإنشاء ملف CSV بنفس الاسم
foreach ($sheet in $sheets) {
	Import-Excel -WorksheetName $sheet -Path './processes.xlsx' | Export-Csv "./$sheet.csv" -NoTypeInformation
}

الختام

باستخدام PowerShell وExcel ، يمكنك استيراد البيانات وتصديرها وإدارتها في دفاتر العمل في Excel تمامًا كما تفعل مع ملفات CSV دون الحاجة إلى تثبيت Excel!

في هذا المقال ، تعلمت أساسيات قراءة وكتابة البيانات في دفتر عمل Excel ولكن هذا يمثل مجرد لمحة سطحية. باستخدام PowerShell ووحدة ImportExcel ، يمكنك إنشاء مخططات بيانية وجداول دورية والاستفادة من ميزات Excel الأخرى القوية!

Source:
https://adamtheautomator.com/powershell-excel/