C# - Comment copier une feuille de calcul Excel d'un classeur à un autre?
J'ai besoin de copier une feuille de calcul d'un classeur vers un autre et je suis un peu coincé. La prémisse est que j'ai un "maître" classeur qui stocke les modèles pour un certain nombre de rapports et j'ai besoin de créer une copie d'une feuille de calcul spécifique et l'ajouter dans un nouveau classeur.
C'est ce que j'ai à ce jour:
private void CreateNewWorkbook(Tables table)
{
Excel.Application app = null;
Excel.Workbook book = null;
Excel.Worksheet sheet = null;
try
{
string startPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
string filePath = System.IO.Path.Combine(startPath, "sal1011forms.xls");
Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
app = new Excel.Application();
book = app.Workbooks.Open(filePath);
sheet = (Excel.Worksheet)book.Worksheets.get_Item((int)table + 1);
sfd.AddExtension = true;
sfd.FileName = table.ToString() + ".xls";
sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if (sfd.ShowDialog() == true)
{
sheet.SaveAs(sfd.FileName);
}
}
finally
{
if (book != null)
{
book.Close();
}
if (app != null)
{
app.Quit();
}
this.ReleaseObject(sheet);
this.ReleaseObject(book);
this.ReleaseObject(app);
}
}
Le seul problème que je rencontre actuellement, c'est que quand je l'appelle .Save() sur la feuille de calcul, il enregistre TOUTES les feuilles de calcul du classeur d'origine dans un nouveau classeur. Toutes les idées sur la façon de corriger cela?
Merci d'avance,
Sonny
OriginalL'auteur Sonny Boy | 2010-09-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez également utiliser la Feuille.Copier() la méthode.
Fondamentalement, Feuille.copier copie la feuille, et va automatiquement créer un nouveau classeur en même temps.
Essayez d'ajouter les lignes suivantes dans votre code, après votre appel téléphonique, pour les Feuilles de calcul.get_Item:
Voici la référence pour la Copie() de la fonction ainsi:
MSDN Lien
OriginalL'auteur Slider345
Je sais que c'est un peu le retard de réponse, mais j'ai du mal un peu avec ce alors j'ai pensé poster ma solution de sorte qu'il peut aider quelqu'un d'autre d'avoir ce problème.
Avoir un modèle de fiche que vous voulez remplir à de nombreuses reprises :
OriginalL'auteur mortysporty
Je voudrais donner une réponse à cette question, même que c'est plus d'une année depuis qu'il a été demandé. J'ai eu le même problème moi-même avec un projet que je suis en développement, et il m'a fallu un certain temps pour trouver la réponse. Je vais poster à l'aide de VB.NET code au lieu de C# depuis que je ne suis pas familier avec le dernier.
Voici l'affaire, afin de copier des feuilles entre les classeurs Excel, il est absolument nécessaire d'utiliser UN seul objet Application d'Excel, puis ouvrez les deux classeurs avec cette application unique, alors nous pouvons utiliser la connu Feuille de calcul.Méthode de copie et il suffit de préciser que la feuille est copié avant ou après la feuille dans le classeur.
Dans ce cas, l'application Excel que j'utilise est celle qui exécute mon projet de Classeur Excel, mais ce serait également le travail:
Bien sûr, l'Application Excel, les deux classeurs, donc après vous avez terminé la copie, vous devez fermer le Classeur source, si votre intention est de ne pas l'afficher (ou du moins pas assez longtemps pour que l'utilisateur de faire quoi que ce soit).
C'est la façon dont je pourrais le faire, l'utilisateur verra un clignotant nouveau Classeur poping up et alors à la fermeture, qui n'est pas vraiment bien, mais jusqu'à présent, je n'ai aucune idée de comment le faire (ou de faire de ce processus de copie en un pas visible)
J'espère que cela a encore une certaine valeur. En ce qui concerne meilleur.
OriginalL'auteur NickZucco