2017-09-08 7 views
0

J'utilise la bibliothèque NPOI pour lire dans un classeur existant et en créer un nouveau. Lors de la création d'une feuille HSSFS. Je vois qu'il y a une méthode appelée SetZoom. Ce que je ne vois pas est une méthode GetZoom, ou une propriété Zoom, afin de dire quel est ce niveau de zoom sur la feuille de travail existante. Des idées?NPOI GetZoom of Worksheet

+0

Si vous chargez votre feuille de calcul existante que vous connaissez a un zoom non par défaut (par exemple 75%), faire un changement pour cela, enregistrez-le, le fichier résultant at-il le même zoom ou le réinitialise-t-il à 100%? –

+0

Je n'ai pas essayé cela dans le code, mais si vous ouvrez MS Excel, réglez votre zoom sur non standard, enregistrez le document et fermez-le - puis - Oui - la prochaine fois que vous l'ouvrirez, le zoom restera votre paramètre non standard. –

Répondre

1

Cela ne va pas être une réponse satisfaisante, parce que je ne suis pas sûr qu'il y en ait un. J'ai regardé à travers le code source NPOI (SetZoom() in line 1161) ainsi que le code source Java d'origine à partir duquel il a été porté (SetZoom() in line 1083). Comme vous pouvez le voir, la méthode SetZoom() crée simplement un SCLRecord:

SCLRecord sclRecord = new SCLRecord(); 
      sclRecord.Numerator = ((short)numerator); 
      sclRecord.Denominator = ((short)denominator); 
      Sheet.SetSCLRecord(sclRecord); 

Et creuser plus loin (dans la java originale):

public void setSCLRecord(SCLRecord sclRecord) { 
    int oldRecordLoc = findFirstRecordLocBySid(SCLRecord.sid); 
    if (oldRecordLoc == -1) { 
     // Insert it after the window record 
     int windowRecordLoc = findFirstRecordLocBySid(WindowTwoRecord.sid); 
     _records.add(windowRecordLoc+1, sclRecord); 
    } else { 
     _records.set(oldRecordLoc, sclRecord); 
    } 
} 

où nous pouvons voir qu'il enregistre ces informations dans un champ privé de ISheet (InternalSheet en java):

private List<RecordBase> _records; 

Ainsi, ces informations ne sont pas accessibles au public. Si le Zoom n'est pas défini, il est par défaut à 100%, mais je ne connais aucun moyen d'accéder au Zoom d'une feuille existante, car il ne semble pas y avoir moyen de le faire dans NPOI sans modifier le code source interne vous-même. Même ainsi, cela ne vous donnerait que le niveau de zoom que vous avez défini, par opposition à celui existant déjà sur la feuille de calcul.

Il peut être possible dans EPPlus si vous accédez au worksheet.View.ZoomScale, mais je ne suis pas actuellement en mesure de le tester pour le moment.

+0

Pensez-vous qu'il serait possible de créer une méthode de classe de remplacement pour définir et obtenir le zoom dans NPOI? EPPlus est excellent pour XLSX, mais il ne gère pas XLS. –

+0

@DavidP Le problème est que je ne suis pas sûr de savoir comment vous pouvez obtenir le zoom en premier lieu, donc je ne sais pas comment écrire une telle méthode. Je pense que le zoom est enregistré quelque part en dehors de la feuille Excel, comme un paramètre Windows ou quelque chose. Désolé, je ne pourrais pas être plus utile. –

+0

Je pensais que vous aviez tort de penser qu'il était stocké dans une clé de registre ou un paramètre Windows. Parce que si vous définissez un zoom personnalisé sur une feuille de calcul dans Excel, fermez le fichier, copiez le fichier dans un nouveau document nommé, puis ouvrez le document nouvellement nommé, il se souvient toujours du zoom personnalisé. Mais en fonction de vos commentaires, j'ai trouvé la solution. Voir ci-dessous. –

1

Grâce à C. Helling, j'ai pu déduire que le Zoom était stocké dans le Window2. Cependant, il est stocké sous forme d'entier (par exemple, 65 pour 65%, 150 pour 150%). Réglage du zoom de la nouvelle feuille de calcul en fonction de zoom de la vieille feuille, est assez facile:

destWS.SetZoom(sourceWS.Sheet.WindowTwo.NormalZoom, 100) 
+0

Bien! Je suis content que tu l'aies compris. –