كيفية الوصول إلى عمود الاستعلام بكلمات متعددة؟

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

  •  12-12-2019
  •  | 
  •  

سؤال

أنا أستخدم قراءة جدول بيانات cfspreadsheet لقراءة ورقة في كائن استعلام.

<cfspreadsheet action="read" src="TestExcel.xls" sheet="1" query="spreadsheetData" headerrow="1" excludeHeaderRow="true"> 

المشكلة هي أن بعض الرؤوس تحتوي على أكثر من كلمة واحدة.لذلك انتهى بي الأمر باستعلام يشبه هذا قليلاً:

ID  Name    Start Date  End Date
3   Test    1/1/2009    1/1/2013
17  Test 2  11/11/2010  11/11/2012

إذا حاولت الوصول إلى أحد الأعمدة التي تحتوي على مسافة في اسم العمود، أحصل على خطأ.

<cfoutput query="spreadsheetData">
   #start date#
</cfoutput>

لقد حاولت #[start date]# كذلك، ولكن ذلك لم ينجح.لا أستطيع التحكم في تنسيق ورقة Excel التي أتلقاها.هل هناك أي طريقة للوصول إلى الأعمدة متعددة الكلمات؟

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

المحلول

عند استخدام تدوين الأقواس، يجب أن تنتهي المحتويات كسلسلة، لذلك:

<cfoutput query="spreadsheetData">
    #spreadsheetData['start date'][CurrentRow]#
</cfoutput>


إذا لم تستخدم علامات الاقتباس، فأنت تقوم بتمرير متغير، ويتم ذلك على النحو التالي:

<cfset ColumnName = 'start date' />

<cfoutput query="spreadsheetData">
    #spreadsheetData[ColumnName][CurrentRow]#
</cfoutput>


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

أيضًا، في حالة استخدام هذا خارج حلقة الاستعلام (على سبيل المثال، لا داخل cfoutput/cfloop مع سمة الاستعلام)، تحتاج أيضًا إلى تحديد نطاق CurrentRow متغير، أي

spreadsheetData[ColumnName][spreadsheetData.CurrentRow]

(أو قم بتوفير الرقم/المتغير الصريح الخاص بك).


كما يلاحظ Leigh أدناه، بالنسبة للسلوك الخاص بـ cfspreadsheet، يمكنك أيضًا تحديد columnnames السمة، لإعادة تسمية العمود إلى شيء يمكن الوصول إليه مباشرة، على سبيل المثال.

<cfspreadsheet query=".." columnNames="Foo,Bar,StartDate,Etcetera" ..>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top