Ich fragte tatsächlich SpreadsheetGear Unterstützung darüber, wie ich meine Implementierung vor etwa 6 Monaten baute. Ich erwähnte, dass b/c ihr AutoFit() nicht genau passierte, dass ich nach der Autosizing einen "Fudge-Faktor" zu jeder Spalte hinzufügen musste. Die Antwort des Support war im Wesentlichen, dass es eine bekannte Diskrepanz zu Excel war, die sie nicht als Fehler klassifizieren. Hier ist, was sie hatten mich zu sagen:
Der Grund für die Auto-fit Spalten leicht sein off zwischen SpreadsheetGear und Excel ist, dass die Font-Metriken zu uns zur Verfügung gestellt von .NET und GDI + von denen abweichen, die in Excel. Da die Spaltenbemaßungen mit den in der Arbeitsmappe verwendeten Schriftarten und damit mit den Zeichenkettendiagrammen verknüpft sind, ist es leider nicht möglich, Excel genau zu vergleichen. Wir tun unser Bestes, um Excel zu vergleichen, aber es ist unmöglich, sie in allen Fällen genau zu vergleichen.
Interessanterweise ist Excel tatsächlich ziemlich inkonsistent mit ihren Font-Metrik-Berechnungen; Versuchen Sie es mit SpreadsheetGear, um eine Arbeitsmappe mit langen Textfolgen zu erstellen, die möglicherweise 40-50 "a" -Zeichen zu einer Zelle hinzufügt. Speichern Sie diese Arbeitsmappe jetzt auf der Festplatte und öffnen Sie sie in Excel 2007 oder 2010. Verwenden Sie den Zoom-Schieberegler in der rechten unteren Ecke, um an verschiedenen Stellen ein- und auszuzoomen, und beachten Sie, dass sich der Text relativ zur Spaltenbreite verschiebt. SpreadsheetGear ist mit dieser Art von Szenario viel konsistenter.
Unabhängig davon, Ihre Methode, einen kleinen "Fudge-Faktor" zu den Spaltenbreiten hinzuzufügen, ist die beste Problemumgehung, die wir vorschlagen können. Es ist "hackish", aber es gibt einfach nichts, was wir tun können, um es zu verbessern, da Sie mit zwei verschiedenen Umgebungen und einer inkonsistenten Metriken in Excel selbst zu tun haben.
Und hier ist der "Fudge-Faktor", die ich verwendet, um die Spalten je nach Bedarf zu erweitern:
ws.UsedRange.Columns.AutoFit()
For col As Integer = 0 To ws.UsedRange.ColumnCount - 1
ws.Cells(1, col).ColumnWidth *= 1.
Next
In C#
ws.UsedRange.Columns.AutoFit()
for (int col = 0; col < ws.UsedRange.ColumnCount; col++)
ws.Cells[1, col].ColumnWidth *= 1.15;
ich so etwas vermutet, ohne sicher zu sein, Dank dieses für Ausräumen.. –