حدث خطأ عند الوصول إلى مصنف Excel من داخل حلقة متوازية

2

أنا أستخدم MATLAB للكتابة إلى ملف Excel يحتوي على وحدات ماكرو ، ثم إعادة تقييم الملف واستخراج نتائج الماكرو باستخدام xlsread . يعمل الكود بشكل جيد مع عامل واحد فقط. ومع ذلك ، إذا كنت تستخدم parfor واستخدام عامل ثانٍ ، يعطي MATLAB رسالة الخطأ على النحو التالي. لكي أكون صارمًا ، قمت بإنشاء ملف Excel ثانٍ للعامل الثاني واستخدامه t = getCurrentTask(); t.ID; لإرشاد العمال للعمل على ملف اكسل الخاص بهم.

Error using xlswrite (line 226)

Invoke Error, Dispatch Exception: Source: Microsoft Excel Description: Microsoft Excel cannot access the file 'C:\Users-----\D0481000'. There are several possible reasons: • The file name or path does not exist. • The file is being used by another program. • The workbook you are trying to save has the same name as a currently open workbook. Help File: xlmain11.chm Help Context ID: 0

Error in extractFromExcelExpress (line 249) xlswrite(filename,writtenIn,sheet,'B23');

يحدث هذا بشكل عشوائي. لقد حاولت تغيير مجلد ملفات excel ويبدأ العمل لساعات ولكنه يتوقف في النهاية. لقد قمت بمسح جميع الوظائف الإضافية في Excel وقمت بوضع المجلد المقابل في مواقع الثقة في excel.

  • إصدار Excel: 2016

  • إصدار MATLAB: R2017a

1 إجابة

0

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

فيما يلي عدة اقتراحات بخصوص ما يمكنك القيام به (بترتيب تنازلي لما هو منطقي بالنسبة لي):

  • حاول إعادة تصميم الشفرة بحيث تصل عملية واحدة فقط (قراءة أو كتابة) إلى الملف في المرة الواحدة. وهذا ما يسمى " القسم الحرج ". أسهل طريقة لتحقيق ذلك في MATLAB هي الحصول على كود خارج . إذا كنت تواجه صعوبة في تنفيذ هذا مع الحفاظ على ، ما عليك سوى حفظ جميع النتائج الوسيطة إلى متغير مساحة العمل ، وكتابتها على القرص عند الانتهاء من الحسابات.
  • قد تكون قادرًا على مشاركة كائن ActiveX بين العمليات (لم أجرب هذا أبدًا ، ولا يمكنني التأكد من أنه ممكن) ، باستخدام نفس النهج كما في . بشكل أساسي ، لا تحاول فتح الملف وإغلاقه بين عمليات الكتابة ، لذلك لا يمكن أن يحدث الموقف حيث لا تزال إحدى العمليات تغلقه حيث تحاول أخرى فتحه.
  • ابحث عن طريقة لاستخدام خاصية. قد يكون هذا مرتبطًا بالاقتراح السابق.
  • استخدم أسرع مساحة تخزين متاحة. يمكنك استخدام محرك أقراص RAM ووضع ملف Excel الخاص بك هناك ، بحيث يمكنك على الأقل تجنب أي بطء ناتج عن استخدام محرك أقراص الشبكة أو محرك الأقراص الثابتة أو حتى SSD.
  • إذا فشل كل شيء آخر ، أحاط عبارات مع . سيؤدي هذا إلى إبطاء الرمز ولكن على الأقل سينتهي في النهاية.
:مؤلف
فوق
قائمة طعام