C#
எக்சல் கோப்புகளை எக்சல் ஆப்ஜக்ட் பயன்படுத்தாமலேயே வெறும் OleDbConnectionனை மட்டும் வைத்துக்கொண்டே டாட்நெட் தொழில்நுட்பம் பயன்படுத்த முடியும், கீழ்க்கண்டவாறு:
OleDbConnection xlConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\filename.xls;Extended Properties='Excel 8.0;'");
இதிலுள்ள ஒவ்வொரு சீட்டையும் ஒரு டேபிலாகப் படிக்கலாம்.
பிறகு டேபிளில் உள்ள வரிசைகளைப் படிக்க "select * from [sheet1$]" என்று அடாப்டரிலோ அல்லது கமாண்ட் ஆப்ஜக்டிலோ வினவளைக் கொடுக்கவேண்டியதுதான். இதில் ஒரு சிறிய பிரச்சனை என்னவென்றால் டேட்டாடைப்பை OleDbConnection புரிந்துகொள்ளும் விதம்தான். உதாரணமாக, எண்கள் மட்டும் இருக்கவேண்டிய ஒரு காலத்தில் (column) ஒரு எழுத்துச்சரத் தகவல் இருந்தது என்றால் அந்த தகவலை எடுத்துக்கொள்ளாமல் வெறும் null என்று அந்த இடத்தில் எடுத்துக்கொள்ளும். இதைத் தவிர்க்க, தகவல்தொடர்ப்புச் சரத்தில், IMEX=1 என்று சேர்த்துத் தரவேண்டும், கீழ்க்கண்டவாறு:
OleDbConnection xlConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\filename.xls;Extended Properties='Excel 8.0;IMEX=1'");
க்ரிட்வ்யூ கன்ட்ரோலை ஒரு டேட்டா டேபிள்/டேட்டாசெட்டுடன் பைன்ட் பண்ணிய பிறகு, எண்கள் இருக்கும் columnகளின் (numeric datatype columns) அடியில் மட்டும் எண்களின் கூட்டுத்தொகையைக் காண்பிக்க வேன்டியிருக்கலாம். பைன்ட் பண்ணிய டேபிளைப் பற்றிய விவரங்கள் நமக்கு முன்னமேயே தெரிந்திருந்தால் datatable.Compute("sum(columname)") மெத்தடைப் பயன்படுத்தி சுலபமாக இதைச் செய்துவிடலாம். ஆனால் இதற்கு எவையெவையெல்லாம் எண்களின் அடிப்படையில் அமைந்த fields என்று நிரல் எழுதும்போதே தெரிந்திருக்கவேண்டும். அப்படி இயலாத நேரங்களில், எந்தெந்த fields எண் வகையைச் சார்ந்தது என்று இயங்குநேரத்தில் கண்டுபிடித்து பிறகு Compute மெத்தடைப் பயன்படுத்தி sumஐ காண்பிக்கவேண்டும்.
ஒரு க்ரிட்வ்யூவையும், டேட்டாடேபிளையும் ஆர்க்யுமென்டாகக் கொடுத்தால், தானாகவே இந்த வேலையைச் செய்யும் ஒரு சின்ன ஃபங்க்ஷன் இதோ:
private void GenerateFooterTotal(GridView gvResult, DataTable dtbl)
{
#region Total for number columns
//We cant compute the total by specifying the field name since we dont
//know...
நிறுவனங்களின் இருப்பு அறிக்கை, லாப நஷ்டக்கணக்கு அறிக்கை போன்றவற்றில் நஷ்டத்தொகை பெரும்பாலும் அடைப்புக்குறிக்குள் குறிப்பிடப்பட்டிருக்கும். ஒரு நிறுவனத்தின் வரவு/செலவு போன்ற விவரங்கள் தகவல் தளத்தில் சேமிக்கப்பட்டிருக்கும். C#ல் துணையுடன் இத்தகைய வரவுகளில் இருந்து கழிக்கப்பட்ட செலவுத்தொகையை லாபமாகவோ நஷ்டமாகவோ அறிக்கையாகக் காண்பிக்கலாம். வரவை விட செலவு கம்மியாக இருந்தால் லாபம். செலவு வரவை விட அதிகம் இருந்தால் நஷ்டம். இந்த நிலையில்,
வரவு-செலவு = தொகை
இந்த தொகை negative எண்ணாக இருந்தால் நஷ்டம். இந்த தொகையை, - குறி நீக்கி அடைப்புக்குறிக்குள் காண்பிக்கவேண்டும்.
100 - 140 = -40 என்பதை, -40 என்று காண்பிக்காமல், (40) என்று அறிக்கையில் காண்பிக்கவேண்டும். ஒன்றிரண்டு லாப/நஷ்டத்தை மட்டுமே காண்பிக்க வேண்டும் என்றால், if/else போட்டு பாசிடிவ்/நெகடிவ் எண்களைப் பொருத்து அப்படியேவோ அல்லது ஒரு அடைப்புக்குறி போட்டோ காண்பித்து விடலாம். ஆனால் மிக அதிக அளவிலான இது போன்ற எண்களைக் காண்பிக்க வேண்டும் என்றால், String.Format என்ற...
one-to-many relationship என்பதை மொழி பெயர்த்ததால் இப்படி ஒரு சொதப்பலான தலைப்பு அமைந்து விட்டதென்றாலும், இவ்வகையில் அமைந்த தகவல்தளம் மிகவும் பயனுள்ளது என்பதில் ஒரு துளியும் சந்தேகம் இல்லை.
வேறு டேபிலில் உள்ள பல வரிசைகளுடன் தொடர்பில் இருக்கும் ஒரு தகவல் வரிசையை, டேட்டாக்ரிட் கண்ட்ரோலின் துணை கொண்டு காண்பிப்பது மிகவும் சுலபம். ஒரு எடுத்துக்காட்டிற்கு, subtext என்ற திறமூல மென்பொருள் கொண்டு இயங்கும் இந்த வலைப்பூவிற்கான தகவல் தள அமைப்பில் இருந்து இரண்டு டேபிள்களை எடுத்துக்கொள்வோம்.
Subtext_Config
BlogId
UserName
...
உள்ளமைக்கோப்பில் (கான்ஃபிகரேஷன் ஃபைல்) இயங்குச்சூழலுக்குத் தகுந்தாற்போல் மாற்றி பயன்படுத்தவேண்டிய விவரங்களை பண்பு/மதிப்பு (கீ/வேல்யூ) அடிப்படையில் சேமித்து வைத்து, System.Configuration.ConfigurationSettings.AppSettings மூலமாக இயங்குநேரத்தில் பெற்றுக்கொள்ளலாம். இப்படி பெறப்படும் மதிப்பு ஒரு துணைநிரலின் பெயரென்றால் அந்த துணைநிரலை அழைக்க வேண்டிய தேவை எனக்கு வந்தது.
அதாவது,
<
add
key="FunctionName" value="myfunction1" />
என்று உள்ளமைக்கோப்பில் இருந்தால், ஒரு குறிப்பிட்ட classல் இருக்கும் myfunction1 என்ற துணைநிரலை அழைக்கவேண்டும்.
மென்பொருள் மேம்பாட்டுப் நிறுவல் ஒன்றில் தகவல்தள மாற்றங்கள் சில செய்யவேண்டியதால் இப்படிச் ஒரு முறையைக் கையாள வேண்டி வந்தது. நிறுவுநிரலிலேயே பயனரிடமிருந்து தகவல்தள விவரங்களை வாங்கி இப்படியான மாற்றங்களைச் செய்யலாம்தான். ஆனால் இந்த குறிப்பிட்ட மென்பொருள் பல தகவல் தளங்களைப் பயன்படுத்தும் சாத்தியமுடையது. ஒவ்வொரு சமயமும் ஒவ்வொரு தகவல் தளத்துடன் தொடர்பு ஏற்படுத்தி இயங்கும் நிரலாதலால், அத்தனை தகவல்தளங்களைப் பற்றிய விவரங்களும் ஒரே நேரத்தில் பயனரிடமிருந்து வாங்குவது சற்று சுற்றுவேலை.
இயங்குநேரத்தில் துணைநிரலின் பெயர் என்று யோசித்ததுமே நினைவுக்கு வருவது delegates. ஆனால் டெலிகேட்ஸ்...