Soru Excel Interop - Diğerlerinden sonra yeni bir çalışma sayfası ekleyin


Bir Excel çalışma kitabına yeni bir çalışma sayfası eklemek ve bu kitapta C # Excel Interop'taki son çalışma sayfasını yapmak için çalışıyorum.

Çok basit görünüyor ve aşağıdaki kodun bunu yapacağını düşündüm:

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);
        }
    }
}

Böyle bir şans yok. Bu yararlı hatayı alıyorum:

COMException işlenmemiş - HRESULT özel durum: 0x800A03EC

buldum bu sayfa Microsoft.com üzerinde, önce sayfayı ekleyip eklemeyi önerdiğimi ve daha sonra aşağıda gösterildiği gibi denemeyi önerdim. Bu web sayfasının Excel 95'i hedeflediğini biliyorum, ancak VBA hala kullanmak için hala çalışıyor.

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);
        }
    }
}

Yukarıdaki ile aynı hatayı alıyorum. Son çalışma sayfamın adını bir dizge olarak geçmeye çalıştım. After her iki parametrede Add ve Move yöntemler, neşe yok!

Ben denedim, bu yüzden benim soru bir Excel çalışma kitabına bir çalışma sayfası eklemek ve bu çalışma kitabında C # Excel Interop kullanarak son sayfa yapmak?

Teşekkürler


25
2017-08-28 09:23


Menşei


JMK - sorununuza bir cevap değil, belki de c # ve excel için yararlı bir işaretçi. LinqToExcel kütüphanesini oldukça uzun bir süredir kullanıyorum ve interop metodoloji kullanarak VS'nin ne kadar iyi bir deneyim olduğunu gerçekten ifade edemiyorum. Zamanınız varsa, gereksinimlerinize uygun olup olmadığına bakmak için bir göz atın. github.com/paulyoder/LinqToExcel Ayrıca code.google.com/p/linqtoexcel - jim tollan
@jimtollan Thankyou kafaları için, ben LinqToExcel kontrol bir noktaya yapacağım, iyi görünüyor. Teşekkürler! - JMK


Cevaplar:


Buradaki belgelere bakıyorum http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.move(v=vs.80).aspx'sonra' nesnesinin sayısal bir konum olmadığını gösterir; sonra sayfanızı konumlandırmak istediğiniz sayfayı temsil eden nesne. Kod muhtemelen (test edilmemiş) gibi bir şey olmalıdır:

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

44
2017-08-28 09:28



Bu, bir parametre olarak çalışmadı Move yöntem, ancak bir parametre olarak işe yaramadı Add yöntem! Çok teşekkür ederim! - JMK
Şimdi test edildi. Bu çok mantıklı. Söylediğiniz gibi, yeni sayfa bir sayıdan sonra değil, numaralandırılmış bir sayfadan sonra (Excel için temel 1) ekleniyor. - George Dooling
Bir XLSM dosyası ise Add () çağrısında bunun üzerinde bir COMException var. - David Thielen


Bu işi yapmalı:

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

6
2017-07-12 09:27





Bu benim için çalışan tek yol:

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
2018-01-29 22:31