2012-06-01 22 views
5

Bir Excel Çalışma Kitabı oluşturmak için Elektronik Tablo Gears'ı kullanıyorum.SpreadsheetGear.IRange.AutoFit(), her bir sütuna doğru genişlik nasıl verilir?

My Çalışma Kitabı çok basit:

  • Ben
  • Ben başlıklarının etrafında ve sütunlar arasındaki sınırları çizmek İlk satır Kalın olan hücrelerin
  • yılında Dizeleri yerleştirin.

İşlemin sonunda, myRange.Columns.AutoFit() numaralı telefonu arayın, sonra çalışma kitabını kaydediyorum.

Excel ile açtığımda, otomatik donanım neredeyse iyi, ancak yine de her sütuntaki 1.2 genişlik biriminde özlüyor.

Bu hata, AutoFit() uygulamasında bir hata mıdır?

cevap

6

Aslında 6 aylık bir süre önce uygulamamı yaptığım için bu konuda SpreadsheetGear desteğini sordum. AutoFit() 'inin tam olarak doğru olmadığını, her bir sütuna otomatik boyutlandırmadan sonra bir "şekerleme faktörü" eklediğimi söyledim. Desteğin yanıtı temel olarak, Excel ile bir hata olarak sınıflandırılmadıkları bilinen bir tutarsızlık olduğuydu. İşte onlar bana söylediklerini var: Otomatik sığdır sütunlar SpreadsheetGear ve Excel arasında kapalı hafifçe olduğu için

nedeni NET ve GDI + tarafından bildirilen yazı tipi ölçülerine Excel'de kullanılanlardan farklı olmasıdır. Sütun boyutları çalışma kitabında kullanılan yazı tiplerine ve dolayısıyla yazı tipi metriklerine bağlı olduğundan, Excel'i tam olarak eşleştirmeye çalışmak maalesef mümkün değildir. Excel'i eşleştirmek için elimizden geleni yapıyoruz, ancak her durumda bunları tam olarak eşleştirmek imkansız.

İlginçtir ki, Excel aslında yazı tipi metrik hesaplamaları ile oldukça tutarsız; Uzun metrajlı bir çalışma kitabı oluşturmak için SpreadsheetGear'ı kullanmayı deneyin, belki de bir hücreye 40-50 “a” karakter ekleyerek. Şimdi bu çalışma kitabını diske kaydedin ve Excel 2007 veya 2010'da açın, farklı noktalarda yakınlaştırmak ve uzaklaştırmak için sağ alt köşedeki yakınlaştırma kaydırıcısını kullanın ve metnin sütun genişliğine göre biraz değiştiğine dikkat edin. SpreadsheetGear bu tür senaryolarla daha tutarlıdır.

Her ne kadar olursa olsun, sütun genişliklerine küçük bir “geçiş faktörü” ekleme yönteminiz önerebileceğimiz en iyi çözümdür. Bu "hack" dür, ancak iki farklı ortamla ve Excel'in kendisinde tutarsız bir metrikle uğraştığınız için bunu geliştirmek için yapabileceğimiz hiçbir şey yoktur. Burada

Ve gerektiği gibi sütunları genişletmek için kullanılan "fudge faktörü" var:

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

C# @Stephen gelen yanıta

ws.UsedRange.Columns.AutoFit() 
for (int col = 0; col < ws.UsedRange.ColumnCount; col++) 
    ws.Cells[1, col].ColumnWidth *= 1.15; 
+0

emin olmadan böyle bir şey şüpheli TX Teşekkür bunu temizlemek için.. –

2

SpreadsheetGear'ı en son sürüme yükseltmek isteyebilirsiniz. SpreadsheetGear 2008'i yükledim ve AutoFit() ile birçok sorun yaşadım. SpreadsheetGear2010 http://www.spreadsheetgear.com/downloads/whatsnew.aspx için değişiklik notunu okuyun ve bu sürümde birkaç AutoFit refactoring'in gerçekleştiğini göreceksiniz.

+0

Bu birçok sorunu değil benim çözer: = (neyse –

1

Bina içinde ...Excel 255 bir sütun genişliği sınırı vardır, bu yüzden bu yaptı:

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; 
     } 
    } 
İlgili konular