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
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]);
Cela devrait faire le travail:
wSheet.Move(Missing.Value, workbook.Sheets[workbook.Sheets.Count]);
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);