2012-04-01 23 views
7

मैं यह सुनिश्चित करना चाहता हूं कि phpExcel द्वारा उत्पादित कार्यपुस्तिका में कोई मूल्य काटा नहीं जाए। ऐसा करने के लिए मैंphpExcel कॉलम आकार के मुद्दों

$oCurrentSheet->getColumnDimension($aCurrentCoords['x'])->setAutoSize(true); 

हर बार जब मैं एक सेल लिखता हूं। यह काम नहीं करता प्रतीत होता है: कई कॉलम वास्तव में छोटे होते हैं।

क्या कोई यह सुनिश्चित करता है कि आउटपुट एक्सेल कार्यपुस्तिका में प्रत्येक कॉलम को इसकी सामग्री के अनुसार आकार दिया जाए?

उत्तर

12

हर बार जब आप सेल लिखते हैं तो ऐसा न करें ... यह एक अनावश्यक ओवरहेड है। प्रत्येक स्तंभ के लिए इसे सिर्फ एक बार करें।

चेतावनी दी जानी चाहिए, यह बचत करते समय भी महंगा है, क्योंकि PHPExcel तब उस सेल की सामग्री के आधार पर आवश्यक चौड़ाई को काम करने वाले कॉलम में प्रत्येक सेल के माध्यम से चलता है, खाता फॉर्मूला गणना और स्वरूपण लेता है, और अधिकतम आकार का उपयोग करता है उस कॉलम में कोई भी सेल। फिर भी यह एक आदर्श समाधान नहीं है: डिफ़ॉल्ट व्यवहार का अनुमान लगाने के लिए वर्णों की संख्या की गणना करना, और फ़ॉन्ट (एरियल, कैलिब्रिया के वर्दान) और पैडिंग के आधार पर एक सामान्य गुणक का उपयोग करना है। अधिक सटीक गणना के लिए, आप गणना के लिए उपयोग की गई विधि को बदल सकते हैं, और कोड फिर एक टीटीएफ बाउंडिंग बॉक्स बनाने के लिए जीडी का उपयोग करता है और उस बॉक्स के आयामों पर सेल आकार का आधार बनाता है। यह एक और सटीक गणना है, लेकिन बहुत धीमी है।

आप का उपयोग कर गणना पद्धति बदल सकते हैं:

PHPExcel_Shared_Font::setAutoSizeMethod($method); 
बचत, जहां $ विधि निम्नलिखित में से एक है से पहले

:

PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX 
PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT 

यह अभी भी एक आदर्श समाधान नहीं है, लेकिन यह है सबसे अच्छी गणना है कि PHPExcel कर सकते हैं।

एक विकल्प है वर्कशीट की गणना कॉलमविड्थ() विधि को सहेजने से पहले सीधे अपने आप को कॉल करना ... और उसके बाद प्रत्येक कॉलम के आयाम के माध्यम से मूल्य को 5% तक बढ़ाकर यह सुनिश्चित करने के लिए कि पूरा कॉलम सहेजने से पहले फिट बैठता है।

संबंधित मुद्दे