كيفية قراءة / كتابة البيانات في Excel 2007 في C ++؟

StackOverflow https://stackoverflow.com/questions/1727361

  •  19-09-2019
  •  | 
  •  

سؤال

كيفية قراءة / كتابة البيانات في Excel 2007 في C ++؟

هل كانت مفيدة؟

المحلول

يوفر Excel واجهة COM التي يمكنك استخدامها من تطبيق C ++ الخاص بك.

لدي خبرة مع Excel 2003 فقط ولكني أفكر في Excel 2007، وسوف يعمل أيضا.

يمكن القيام بذلك على سبيل المثال مع #AMPort أو بالطريقة الموضحة في هذه المقالة:http://support.microsoft.com/kb/216686.

نصائح أخرى

هناك حل ثعبان (باستخدام إيفاد COM) هنا: http://snippets.dzone.com/posts/show/2036.

إنه ليس C ++، ولكن ينبغي أن تكون واجهة COM هي نفسها بغض النظر عن أي لغة تستخدمها، أليس كذلك؟

لن تحتاج إلى ميناء كل شيء. مجرد __init__, set_range, get_value, set_value, save (أو save_as), close, ، و quit. وبعد قد تحتاج أيضا إلى التخلص من القمامة (كما Python يحتوي على GC التلقائي).

أو يمكنك فقط منفذ (وتعديل) التعليمة البرمجية التالية (التي لم أختبرها، لأنني لا أملك Excel بعد الآن - يجب عليك التحقق من ذلك عن طريق تنزيل Python و Pythonwin):

from win32com.client import Dispatch
app = Dispatch("Excel.Application")
app.Visible = True # spooky - watch the app run on your desktop!
app.Workbooks.Open("C:\\book.xls")

range = app.ActiveWorkbook.Sheets(1).Range("a1") 
print 'The range was:'
print range.Value

range.Value = 42

print 'The value is now 42'  

app.ActiveWorkbook.Save()
app.ActiveWorkbook.SaveAs("C:\\excel2.xls")

app.ActiveWorkbook.Close()
app.Quit()

# any gc to do?

ملفات Excel 2007 هي ببساطة ملفات ZIP. حاول إعادة تسمية .xlsx إلى .zip: يمكنك استخراج الملفات والمجلدات. مع محرر نصوص، يمكنك عرض أنهم جميع ملفات XML.

وبالتالي فإن الحل:

  1. استخدم فئة مشتركة لفك ضغط XLSX
  2. استخدم محلل XML للاستيلاء عليك
  3. إذا كنت قد قمت بتعديل SomeTheig، Re-Zip All

لا يوجد كائن COM مطلوب. اعتمادا على برنامج التحويل البرمجي C ++، يمكنك العثور عليها بسهولة المصادر المطلوبة.

هناك ثلاثة أشياء رئيسية تحتاج إلى القيام به.

1) ضمان تثبيت الملفات مسبقا ومؤديها.

من الواضح عمياء أعرفها، ولكن تأكد من أن لديك نسخة مناسبة من Excel المثبتة، بحيث يمكنك تحديد موقع مكتبات Microsoft المطلوبة (ومواقعها). namely mso.dll، vbe6ext.olb و excel.exe

2) قم بإعداد مكتبات Microsoft.

في كود C ++ الخاص بك، دعنا نقول أنك تبدأ بتطبيق وحدة التحكم البسيطة، تأكد من تضمين مكتبات الاستيراد في أي تطبيق C ++ الذي واجهات مع Excel. في مثالي، استخدم:

#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\OFFICE11\\MSO.DLL" \
rename( "RGB", "MSORGB" )

using namespace Office;  

#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\VBA\\VBA6\\VBE6EXT.OLB"  

using namespace VBIDE;  

#import "C:\\Program Files (x86)\\Microsoft Office\\OFFICE11\\EXCEL.EXE" \  
    rename( "DialogBox", "ExcelDialogBox" ) \  
    rename( "RGB", "ExcelRGB" ) \  
    rename( "CopyFile", "ExcelCopyFile" ) \  
    rename( "ReplaceText", "ExcelReplaceText" ) \  
    exclude( "IFont", "IPicture" ) no_dual_interfaces 

3) استخدم نموذج كائن Excel في كود C ++

على سبيل المثال، لإعلان مؤشر كائن تطبيق Excel لقراءة / كتابة مصنف Excel:

Excel::_ApplicationPtr pXL;  
pXL->Workbooks->Open( L"C:\\dump\\book.xls" );

والوصول إلى ورقة عمل Excel ومعالجتها والخلايا داخلها:

Excel::_WorksheetPtr pWksheet = pXL->ActiveSheet;  
Excel::RangePtr pRange = pWksheet->Cells;  
double value = pRange->Item[1][1];  
pRange->Item[1][1] = 5.4321; 

وهلم جرا. لدي مناقشة أكثر متعمقة في هذا التالي نشر بلوق.

طريقة منخفضة للتكنولوجيا التي استخدمتها في مكانين من المشروعات هي إجراء برنامج نصي / ماكرو بسيط / ما يدير برنامج خارجي. اكتب هذا البرنامج الخارجي في C ++. احصل على هذا البرنامج الخارجي لقراءة مدخلاته من وإخراجها إلى ملف .csv (ملف نصي مفصوم بفواصل بسيطة). يمكن ل Excel بسهولة قراءة وكتابة ملفات .csv، بحيث يمنحك هذا الإعداد كل ما تحتاجه للحصول على حل قابل للتطبيق.

يمكن أن يتم ذلك كل هذا عبر واجهة IDISPatch. يمكن أن تحصل على معقدة دموية حقا بسرعة (هتافات Microsoft) ولكن مرة واحدة على الأقل لديك إكسل جولة رأسك ستجد دمجا مع أي تطبيق MS آخر سهل للغاية :)

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

تحرير: مثال GURU Code هو For Excel 2003 ولكن يجب أن يكون من السهل إلى حد ما تمديده إلى 2007 :)

ابدأ هنا مع OpenXML SDK.. وبعد قم بتنزيل SDK من هنا. وبعد يستخدم SDK .NET، لذلك قد تحتاج إلى استخدام C ++. صافي

لقد كان وقتا طويلا جدا لكنني استخدمت Jet OLEDB للحصول على ملفات Excel. قد تبدأ البحث في هذا الاتجاه.

لقد استخدمت مكونات الطرف الثالث لهذا في الماضي: OLE XLSFile من SM Software. (ليست حرة، ولكن غير مكلفة). ميزة هذا المكون على مكونات Microsoft COM هي أنه يمكنك استخدامه لكتابة ملفات XLS حتى إذا لم يتم تثبيت Excel.

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

إذا كنت بحاجة إلى أفضل أداء، فإن كتابة ملفات Excel الثنائية هي الطريقة التي يجب أن تذهب وكتابةها ليست صعبة مثل قراءةها. يتم توثيق تنسيق الملف الثنائي جيدا نسبيا بواسطة مشروع OpenOffice.org:

http://sc.openoffice.org/excelfileformat.pdf.

وقد أصدرت Microsoft أيضا الوثائق:

http://download.microsoft.com/DownLoad /B/B/EE/BEDSBDD7-E5E8-422A-ABFD-4342ED7AD886/EXCELESFILEFILEFILEFILORFIONFIFILFITIONFITION.SPECITication.xps.

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

سيتطلب استخدام واجهة COM مكالمات مكلفة خارج العملية إلا إذا قمت بكتابة Excel COM Addin. إذا كتبت Addin التي تستورد بياناتك في ورقة Excel الحالية، فلن تظل ملء الورقة أبطأ بكثير من إلقاء ملف، ولكن لملف واحد في وقت واحد يمكن أن يكون هذا مقبولا اعتمادا على سيناريو المستخدم الخاص بك. إذا قررت استخدام واجهة COM، فقن عدد المكالمات إلى Excel. استخدم الأساليب التي تسمح بإدراج صفيف من القيم إذا كانت موجودة، مع تعيين خصائص نمط حسب الصف والعمود ممكنة وليس لكل خلية.

يمكنك استخدام ODBC لقراءة البيانات وكتابةها من ملف Excel بسهولة بدون Excel. الرابط:هنا

رابط كيفية كتابة البيانات باستخدام ODBC: هنا

لقد استخدمت مجموعة من فئات C ++ المتوفرة من CodeProject من قبل الكتابة إلى ملفات XLS.

انها حقا سهلة الاستخدام، ومجاني! يمكن ان تجدها هنا.

أخذني لا وقت لإعداده.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top