web-dev-qa-db-fra.com

Excel Interop - Ajoutez une nouvelle feuille de calcul après toutes les autres

J'essaie d'ajouter une nouvelle feuille de calcul à un classeur Excel et d'en faire la dernière feuille de calcul du livre dans C # Excel Interop.

Cela semble vraiment simple, et je pensais que le code ci-dessous le ferait:

using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var Excel = new Excel.Application();

            var workbook = Excel.Workbooks.Open(@"C:\test\Test.xlsx");
            workbook.Sheets.Add(After: workbook.Sheets.Count);

            workbook.Save();
            workbook.Close();

            Marshal.ReleaseComObject(Excel);
        }
    }
}

Pas de chance. J'obtiens cette erreur utile:

COMException n'a pas été gérée - Exception de HRESULT: 0x800A03EC

J'ai trouvé cette page sur Microsoft.com, ce qui m'a suggéré d'essayer d'abord d'ajouter la feuille, puis de la déplacer, j'ai donc essayé comme indiqué ci-dessous. Je sais que cette page Web cible Excel 95 mais le VBA est toujours là pour utiliser donc j'espérais que cela fonctionnerait toujours:

using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var Excel = new Excel.Application();

            var workbook = Excel.Workbooks.Open(@"C:\test\Test.xlsx");
            workbook.Sheets.Add();
            workbook.Sheets.Move(After: workbook.Sheets.Count);

            workbook.Save();
            workbook.Close();

            Marshal.ReleaseComObject(Excel);
        }
    }
}

J'obtiens la même erreur que ci-dessus. J'ai également essayé de passer le nom de ma dernière feuille de calcul sous forme de chaîne en tant que paramètre After dans les méthodes Add et Move, pas de joie!

C'est ce que j'ai essayé, donc ma question est de savoir comment ajouter une feuille de calcul à un classeur Excel et en faire la dernière feuille du classeur à l'aide de C # Excel Interop?

Merci

28
JMK

En regardant la documentation ici http://msdn.Microsoft.com/en-us/library/Microsoft.office.tools.Excel.worksheet.move (v = vs.80) .aspx , it indique que l'objet "après" n'est pas une position numérique; c'est l'objet représentant la feuille sur laquelle vous souhaitez positionner votre feuille. Le code devrait probablement être quelque chose comme (non testé):

workbook.Sheets.Add(After: workbook.Sheets[workbook.Sheets.Count]); 
50
Dave

Cela devrait faire le travail:

wSheet.Move(Missing.Value, workbook.Sheets[workbook.Sheets.Count]);
6
Radu D

C'est la seule façon qui fonctionne pour moi:

xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.Add
    (System.Reflection.Missing.Value,
     xlWorkBook.Worksheets[xlWorkBook.Worksheets.Count], 
     System.Reflection.Missing.Value, 
     System.Reflection.Missing.Value);
3
shiroxx