افزونه FarsiTools (فارسی تولز) در اکسل، افزونهای است بر روی تاریخ شمسی و میلادی محاسباتی را انجام میدهد و مهترین توابع آن عبارتند از :
تابع s2m اکسل
برای تبدیل تاریخ شمسی به میلادی در اکسل
تابع m2s اکسل
تبدیل تاریخ میلادی به شمسی در اکسل
هدف از از نگارش این مقاله، نقد و بررسی این افزونه است و مخاطب این مقاله کاربران حرفهای اکسل است.
معرفی افزونه FarsiTools در اکسل
این افزونه یکی از افزونههای رایگان اکسل برای محاسبات تاریخ شمسی است که در سالهای اخیر در اینترنت و سایتهای مختلف برای دانلود قرار داده شده است.
توجه) اولین افزونه توابع تاریخ شمسی و تبدیل عدد به حروف در اکسل توسط فرساران در سال۱۳۸۵ منتشر شده است و کاملا متفاوت از FarsiTools است.
از کدها و نامگذاری توابع این افزونه مشخص میشود که برنامه و الگوریتم اصلی این افزونه از توابعی که در SQL نوشته شده است، کپی برداری شده است و تا آنجایی که جستجو کردم به صورت دقیقی مشخص نیست که کدهای SQL توسط چه کسی نوشته شده است.
همچنین تاکنون برای من مشخص نیست که دقیقا چه کسی تبدیل و بازنویسی برنامه SQL را در اکسل انجام داده است.
نقد افزونه FarsiTools اکسل
در سالهای اخیر از وجود این افزونه مطلع بودم اما هیچ گاه آن را دانلود و یا تست نکرده بودم تا اینکه در چند روز پیش (بهمن ۱۴۰۲) متوجه کندی بیش از حد یک فایل در یک سازمان شدم که از فارسی تولز اکسل استفاده میکردند و همین امر باعث شد که به کدهای آن نگاهی اجمالی بیاندازم و متوجه شدم که:
+ گروه یا کسی که کدهای s2m و m2s را در اکسل این افزونه را نوشته است، برنامه نویسی با تجربه و حرفهای اکسل نیست.
+ دور از ذهن نیست که آن فرد/گروه هیچ قصدی برای انتشار عمومی این افزونه نداشتهاند و احتمالا برای مرتفع کردن نیازی محدود در یک سازمان این کدها نوشته شده است.
+ این افزونه پس از انتشار هیچ بهبود و یا نسخه جدیدی ندارد.
+ برای این افزونه راهنمای استفاده ارائه نشده است.
این افزونه باعث کند شدن محاسبات در فایلهای بزرگ اکسل خواهد شد و استفاده از آن در سازمانها و برای فایلها بزرگ توصیه نمیشود.
چند نمونه از کد نویسی اشتباه تابع s2m و m2s
در ادامه به چند نمونه فنی از کدنویسی اشتباه در توابع s2m و m2s این افزونه اشاره میشود و به نقد بهینه بودن توابع اصلی محاسبات (که همانطور که اشاره شد برای Sql نوشته شدهاند)، نمیپردازیم.
الف) در کد زیر نوع متغیرها تعریف نشده است و به همین دلیل آنها از نوع Variant در نظر گرفته میشوند و همین مورد باعث کند شدن چشمگیر کد خواهد شد:
Dim iYear, iMonth, iDay
ب) در تابع s2m ، تصحیح تاریخ انجام میشود. یعنی اگر تاریخ با / و یا . و یا - جدا شده باشد، این تاریخ به صورت صحیحی درخواهد آمد. اینکار (یعنی نرمال سازی) در VBA بسیار کند تر از انجام همین کار در اکسل است.
در واقع بسیار سریع تر است که تصحیح تاریخها (چنانچه نیاز باشد) با خود توابع اکسل و در اکسل انجام شود و نه در کدهای VBA که بسیار کندتر از توابع اکسل اجرا میشوند و برنامه نویسان با تجربه اکسل میدانند که تا حد ممکن محاسباتی که با خود توابع اکسل قابل انجام است را نباید در VBA مجدد پیاده سازی کنند.
همچنین برای تصحیح تاریخها یک حلقه ایجاد شده است که خود این موضوع هم باعث کند شدن کد خواهد شد و نحوه پیاده سازی کم تجربه بودن برنامه نویس را نشان میدهد:
For I = 1 To Len(myDate)
st = Mid(myDate, I, 1)
If (st = "/" Or st = "-" Or st = "." Or st = "\") And x <> 1 Then
x = 1
If I = 3 Then S = "13" & S
Else
If (st = "/" Or st = "-" Or st = "." Or st = "\") And x = 1 Then
x = 2
If I = 5 Or I = 7 Then S = Left(S, Len(S) - 1) & "0" & Right(S, 1)
Else
S = S & st
End If
End If
Next
ج) در تابع m2s دو متغیر iWeekday و iMonth همواره محاسبه و مقدار دهی میشوند در صورتی که ممکن است در بسیار از موارد استفاده نشوند و فقط باعث مصرف بیهوده cpu و ram خواهند شد.
جمع بندی
اگر شما از کاربران تازه کار اکسل هستید، قطعا استفاده از افزونه فارسی تولز اکسل میتواند برای شما راهگشا باشد اما استفاده از این افزونه در سازمانها و توسط افراد حرفهای به دلیل کدهای غیر بهینه که باعث کندشدن چشمگیر فایلهای بزرگ میشود، توصیه نمیشود.
در صورتی که نیاز به محاسبات بر روی تاریخ شمسی اکسل را دارید، میتوانید از «توابع تاریخ هجری شمسی در اکسل و تبدیل عدد به حروف» فرساران استفاده کنید. این افزونه اولین افزونه محاسبات بر روی تاریخ شمسی در ایران است و تاکنون ۵ بار به روزرسانی کلی شده است.
همچنین در فایل راهنمای ویدئویی توابع تاریخ شمسی اکسل فرساران، سایر روشهای اکسلی برای تبدیل تاریخ شمسی و یا میلادی (بدون نیاز به هیچ برنامه و یا افزونهای) آموزش داده شده است و توصیه میشود که سازمانها و کارشناسان حرفهای اکسل از آن استفاده کنند.
به همراه این محصول فایل PDF کاملی از توابع و توضیحات تکمیلی ارائه شده است که مطالعه آن توصیه میشود.
توجه) «توابع تاریخ هجری شمسی در اکسل و تبدیل عدد به حروف» هم اکنون به صورت رایگان از صفحه آن در فرساران قابل دانلود است.
پرسشهای متداول
ا) افزونه FarsiTools را از کجا دانلود کنم؟
پاسخ) با جستجوی «دانلود FarsiTools اکسل» میتوانید سایتهای متعددی را بیابید که این افزونه را برای دانلود قرار دادهاند.
۲) آیا بجز FarsiTools ، روش دیگری برای تبدیل تاریخهای شمسی به میلادی در اکسل وجود دارد؟
پاسخ) بله، میتوانید از محصول «توابع تاریخ هجری شمسی در اکسل و تبدیل عدد به حروف» فرساران استفاده کنید که در آن توابعی مختلفی برای اینکار را در اختیار شما قرار خواهد داد.
ناگفته نماند که چند مورد مشابه برای اینکار توسط افراد/وب سایتهایی ارائه شده است که برخی از آنها به صورت کد بسته هستند که اساسا بررسی محتوای آنها ممکن نیست و یک مورد دیگر را اینجانب مطالعه نکردهام. و با جستجو در اینترنت میتوانید این سایر موارد مشابه را بیابید و بررسی کنید.
توجه داشته باشید که Persian Functions For Excel نام قدیم محصول «توابع تاریخ هجری شمسی در اکسل و تبدیل عدد به حروف» فرساران است که میتوانید نسخه ۵ آن را در فرساران به رایگان دانلود کنید.
۳) آیا میتوان با خود توابع اکسل و بدون نیاز به هیچ افزونهای تاریخهای میلادی را به شمسی و یا تاریخهای شمسی را به میلادی تبدیل کرد؟
پاسخ) بله میتوان، در فایل ویدئویی آموزشی که همراه محصول محصول «توابع تاریخ هجری شمسی در اکسل و تبدیل عدد به حروف» فرساران، تکنیکهای اینکار آموزش داده شده است.
۴) آیا میتوان توابع s2m و m2s استفاده شده است را با توابع محصول «توابع تاریخ هجری شمسی در اکسل و تبدیل عدد به حروف» فرساران، جایگزین کرد؟
پاسخ) بله، کافی است که فایل آن را دانلود کنید و از توابع آن استفاده کنید. توصیه میشود که حتما فایل راهنما و ویدئوهای آموزشی این توابع را ببینید.
سخن پایانی
اساسا هدف نگارش این مقاله تخریب افزونه FarsiTools نبوده است و اگر به صورت اتفاقی در یک سازمان متوجه کندی فایل اکسل و کدهای غیر بهینه این افزونه نمیشدم، هرگز این مقاله نگاشته نمیشد.
این مقاله برای کمک به آن دسته از کارشناسانی در سازمانهاست که با فایلهای بسیار بزرگ سروکار دارند و کندی بسیار زیاد فایلهای اکسل آنها در اثر استفاده از این افزونه، باعث اتلاف زمان زیادی از آنها میشود.
بدیهی است که قدردان کسی که کدهای اولیه SQL این توابع را نوشته است، خواهیم بود زیرا بدون تردید در آن مقطع زمانی مشکل بسیاری را از کاربران فارسی زبان و یا ایرانی حل کرده است. اما در این مقاله اساسا کدهای اولیه SQL نقد نشده است بلکه روش پیاده سازی غیر بهینه آن در اکسل مورد بررسی قرار گرفته است.
شما هم تجربه یا دیدگاه خود را بنویسید:
تشکر استاد میدانی عزیز
خدا رو شکر از همان اوایل انتشار توابع تبدیل تاریخ شمسی و ... با سایت شما آشنا شدم و خریداری کردم. به همه دوستان توصیه میکنم چون واقعا بهینه و عالی هستند