2012-06-01 17 views
5

मैं एक्सेल वर्कबुक उत्पन्न करने के लिए स्प्रेडशीटगियर का उपयोग करता हूं।स्प्रेडशीट Gear.IRange.AutoFit() प्रत्येक कॉलम को सही चौड़ाई कैसे प्राप्त करें?

मेरे वर्कबुक बहुत सरल है:

  • मैं कोशिकाओं
  • में स्ट्रिंग्स सम्मिलित पहली पंक्ति बोल्ड है
  • मैं हेडर के आसपास है और स्तंभों के बीच की सीमाओं को आकर्षित।

प्रक्रिया के अंत में, मैं myRange.Columns.AutoFit() पर कॉल करता हूं, फिर मैं कार्यपुस्तिका को सहेजता हूं।

जब मैं इसे एक्सेल के साथ खोलता हूं, तो ऑटोफिट लगभग अच्छा होता है, लेकिन यह अभी भी प्रत्येक कॉलम में 1.2 चौड़ाई इकाइयों को याद करता है।

क्या यह AutoFit() कार्यान्वयन में एक बग है या क्या मुझे कुछ याद आ रही है?

उत्तर

6

मैंने वास्तव में इस बारे में स्प्रेडशीट गियर समर्थन से पूछा क्योंकि मैं 6 महीने पहले अपना कार्यान्वयन कर रहा था। मैंने उल्लेख किया कि बी/सी उनके ऑटोफिट() बिल्कुल सही नहीं था, कि मुझे स्वत :करण के बाद प्रत्येक कॉलम में "फज कारक" जोड़ना पड़ा। समर्थन की प्रतिक्रिया अनिवार्य रूप से थी कि यह एक्सेल के साथ एक ज्ञात विसंगति थी, कि वे एक बग के रूप में वर्गीकृत नहीं हैं। यहाँ वे मुझे क्या कहना था है:

स्वतः फ़िट कॉलम SpreadsheetGear और एक्सेल के बीच बंद थोड़ा होने के लिए कारण यह है कि फॉन्ट नेट और GDI + द्वारा हमें प्रदान की मैट्रिक्स एक्सेल में इस्तेमाल किया उन लोगों से अलग है। चूंकि कॉलम आयाम कार्यपुस्तिका में उपयोग किए गए फोंट से बंधे होते हैं, और इसलिए एक्सेल से मिलान करने का प्रयास करने वाले फ़ॉन्ट मेट्रिक्स, दुर्भाग्यवश, संभवतः संभव नहीं है। हम एक्सेल से मेल खाने के लिए अपनी पूरी कोशिश करते हैं, लेकिन सभी मामलों में बिल्कुल मिलान करना असंभव है।

दिलचस्प बात यह है कि एक्सेल वास्तव में उनके फ़ॉन्ट मीट्रिक गणनाओं के साथ असंगत है; लंबे समय तक पाठ के साथ कार्यपुस्तिका बनाने के लिए स्प्रेडशीट गियर का उपयोग करने का प्रयास करें, शायद सेल में 40-50 "ए" वर्ण जोड़ना। अब उस कार्यपुस्तिका को डिस्क पर सहेजें और इसे Excel 2007 या 2010 में खोलें, अपने ज़ूम स्लाइडर को निचले-दाएं कोने में अलग-अलग बिंदुओं पर ज़ूम इन और आउट करने के लिए उपयोग करें और ध्यान दें कि टेक्स्ट कॉलम चौड़ाई के सापेक्ष चारों ओर बदलता है। स्प्रेडशीट गियर इस प्रकार के परिदृश्य के साथ अधिक सुसंगत है।

भले ही, स्तंभ चौड़ाई में थोड़ा "धुंध कारक" जोड़ने की आपकी विधि सबसे अच्छा कामकाज है जो हम सुझा सकते हैं। यह "हैकिश" है लेकिन इसमें कुछ भी नहीं है जो हम इसे सुधारने के लिए कर सकते हैं क्योंकि आप दो अलग-अलग वातावरण और एक्सेल में एक असंगत मीट्रिक से निपट रहे हैं।

और यहाँ "फ़ज कारक" है कि मैं जरूरत के रूप में स्तंभों को चौड़ा करने के लिए इस्तेमाल है:

ws.UsedRange.Columns.AutoFit() 
For col As Integer = 0 To ws.UsedRange.ColumnCount - 1 
    ws.Cells(1, col).ColumnWidth *= 1. 
Next 

सी #

@Stephen से जवाब पर
ws.UsedRange.Columns.AutoFit() 
for (int col = 0; col < ws.UsedRange.ColumnCount; col++) 
    ws.Cells[1, col].ColumnWidth *= 1.15; 
+0

मैं इस बाहर समाशोधन के लिए यकीन है कि किया जा रहा बिना ऐसा ही कुछ संदिग्ध TX धन्यवाद।। –

2

आप स्प्रेडशीटगियर को नवीनतम संस्करण में अपग्रेड करना चाहते हैं। मैंने स्प्रेडशीट गियर 2008 स्थापित किया था और मुझे ऑटोफिट() के साथ कई समस्याएं आई हैं। SpreadsheetGear2010 http://www.spreadsheetgear.com/downloads/whatsnew.aspx के लिए चेंजलॉग पढ़ें और आप देखेंगे कि इस रिलीज में कई ऑटोफिट रिफैक्टरिंग हुई हैं।

+0

यह कई मुद्दों लेकिन मेरा नहीं हल करती है: = (, वैसे भी –

1

बिल्डिंग में ...एक्सेल 255 के एक स्तंभ चौड़ाई सीमा होती है, तो मैं ऐसा किया:

private static void AutoFitColumns(SpreadsheetGear.IWorksheet worksheet) 
    { 
     worksheet.UsedRange.Columns.AutoFit(); 

     const int ExcelMaximumColumnWidth = 255; 
     const double OneHundredFifteenPercent = 1.15; 

     for (var i = 0; i < worksheet.UsedRange.ColumnCount; i++) 
     { 
      var cell = worksheet.Cells[1, i]; 
      var width = cell.ColumnWidth * OneHundredFifteenPercent; 

      if (width > ExcelMaximumColumnWidth) 
       width = ExcelMaximumColumnWidth; 

      cell.ColumnWidth = width; 
     } 
    } 
संबंधित मुद्दे