Şimdi Ara

Asp.net , Office.Interop.Excel Referansını Kullanarak Excel’e Aktarma Sorunu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir - 3 Masaüstü
5 sn
11
Cevap
0
Favori
1.617
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba. Visual Studio 2013 asp.net de excele aktarım işlemi yapıyorum. Aktarım işlemi localhost da yani kendi bilgisayarımda başarılı bir şekilde oluyor. Fakat yayınlamak için Publish edip Windows Server 2012 ye attığım zaman aşağıdaki hatayı veriyor. Sizce neden kaynaklanıyor olabilir

    Denediğim yöntem: Projeyi x86 da publish ettim fakat yine olmadı. Benim asıl merak ettiğim husus; publish ettikten sonra Bin klasörüne ilgili Interop.Excel referansı gelmiyor, sunucuda bulunan Bin klasörünü elle yapıştırdım fakat yine olmadı.

    Not: Windows Server tarafında ayar yapılması ve referans dll in ilgili klasöre kopyalanması gerekebilir düşüncesindeyim, fakat hangi adımı nereye yapacağım onu çözemedim.

    (Proje / Server içerisinde ilk defa excel e aktarım kullanılıyor.)

    HATA METNİ:
    Server Error in '/' Application.

    Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
     Asp.net , Office.Interop.Excel Referansını Kullanarak Excel’e Aktarma Sorunu







  • İnterop excell.dll die nette ara onunla projeno derle Veya sunucuna office kur

    < Bu ileti mini sürüm kullanılarak atıldı >
  • veli_0300 kullanıcısına yanıt
    dll li yükledim daha sonra ofisi de kurdum fakat u sefer de aşağıdaki hatayı verdi.
     Asp.net , Office.Interop.Excel Referansını Kullanarak Excel’e Aktarma Sorunu
  • ensonunda mesela nasıl türettiysen excl.Quit(); kullan çünkü sen her butana bastığında excel üretiyor görvyöneticinsende bakabilirsin.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • veli_0300 kullanıcısına yanıt
    Bilgi için saolun hocam fakat sorunu çözemeyince forum sitelerinden excele aktarma kodları ile sorunu çözmüştüm
  • EfeUğur E kullanıcısına yanıt
    forum sitelerinden excele aktarma kodları ile çözdüm derken?. biraz daha açabilir misin bende powerpoint le ilgili işlem yaparken bu hatayı alıyorum da yardımcı olabilme şansın var mıdır acaba ?
  • SercanBaydar09 S kullanıcısına yanıt
    Bu hatayla ben de zamanında çok karşılaştım. Excel kapatılmadığı için veriyor. Fakat quit() metodu ile yaramıyor. O yüzden kendinize bir metod yazmanız lazım. Bilgisayarı açtığımda paylaşırım excelden veri alma ve excel e veri aktarma kodları da var.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • quote:

    Orijinalden alıntı: L[A]hor

    Bu hatayla ben de zamanında çok karşılaştım. Excel kapatılmadığı için veriyor. Fakat quit() metodu ile yaramıyor. O yüzden kendinize bir metod yazmanız lazım. Bilgisayarı açtığımda paylaşırım excelden veri alma ve excel e veri aktarma kodları da var.

    Konu yeniden gündeme gelmiş ama
    tavsiyem
    Interop yerine OpenXML kullanmanız.

    Kendinize sınıf yaratıp o şeklide kullanırsanız daha verimli olur.

    https://github.com/OfficeDev/Open-Xml-PowerTools
    veya

    EEPLus
    ExcelLibrary
    ClosedXML
    vs.



    < Bu mesaj bu kişi tarafından değiştirildi Gabriel.Espaso -- 23 Eylül 2016; 9:51:54 >




  • Gabriel.Espaso kullanıcısına yanıt
    Teşekkürler. Kimi zaman ExcelLibrary' i ben de kullanmıştım fakat müşteri bazı hücrelerin renklendirilmesini ve formüle edilmesini isteyince Interop üzerinden gitmiştim. Şöyle iki parça kod ile çözmüştüm.

    public DataTable GetDataFromExcel() 
    {
    Excel.Application xlApp;
    Excel.Workbook xlWorkBook;
    Excel.Worksheet xlWorkSheet;
    Excel.Range range;

    System.Data.DataTable dt = new System.Data.DataTable();


    xlApp = new Excel.Application();
    xlWorkBook = xlApp.Workbooks.Open(Application.StartupPath + "\\maliyet.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

    range = xlWorkSheet.UsedRange;

    dt.Columns.Add("ESKI_STOK_KODU");
    dt.Columns.Add("STOK_KODU");
    dt.Columns.Add("STOK_ADI");

    dt.Columns.Add("Genel Gider");
    dt.Columns.Add("Tölerans");
    dt.Columns.Add("Kâr");
    dt.Columns.Add("Min Satış");

    dt.Columns.Add("YUKSEK_FIYAT");
    dt.Columns.Add("DUSUK_FIYAT");
    dt.Columns.Add("ORT_FIYAT");
    dt.Columns.Add("MALIYET");
    dt.Columns.Add("İstenilen Maliyet");

    DataRow bos = dt.NewRow();
    dt.Rows.Add(bos);


    string satir = xlWorkSheet.Rows[4].Cells[1].Value;
    string[] data = st.StringParser(new string[] { " " }, satir);

    //datayı excelden doldu
    for (int i = 5; i <= range.Rows.Count - 2; i++)
    {

    string excSatir = xlWorkSheet.Rows[i].Cells[1].Value;
    DataRow dr = dt.NewRow();
    int startPoint = 0;
    int okunacakBoy = 0;
    for (int k = 0; k < data.Length; k++)
    {

    okunacakBoy = data[k].Length - 1;
    if (k <= 2)
    {
    dr[k] = excSatir.Substring(startPoint, okunacakBoy).Trim().ToString();
    if (excSatir.Substring(startPoint, okunacakBoy).Trim().Substring(0, 1).Contains("."))
    {
    dr[k] = "0." + excSatir.Substring(startPoint, okunacakBoy).Trim().Remove(0, 1).ToString().Replace(".", ",").ToString();
    }
    }
    else if (k >= 2 && k <= 7)
    {
    dr[k + 4] = excSatir.Substring(startPoint, okunacakBoy).Trim().ToString();
    if (excSatir.Substring(startPoint, okunacakBoy).Trim().Substring(0, 1).Contains("."))
    {
    dr[k + 4] = "0." + excSatir.Substring(startPoint, okunacakBoy).Trim().Remove(0, 1).Replace(".", ",").ToString();
    }
    }




    startPoint += data[k].Length - 1;


    }

    dt.Rows.Add(dr);
    }

    foreach (DataRow item in dt.Rows)
    {
    string r = item["İstenilen Maliyet"].ToString();
    item["İstenilen Maliyet"] = r.Replace(".", ",");

    r = item["YUKSEK_FIYAT"].ToString();
    item["YUKSEK_FIYAT"] = r.Replace(".", ",");

    r = item["DUSUK_FIYAT"].ToString();
    item["DUSUK_FIYAT"] = r.Replace(".", ",");

    r = item["ORT_FIYAT"].ToString();
    item["ORT_FIYAT"] = r.Replace(".", ",");

    r = item["MALIYET"].ToString();
    item["MALIYET"] = r.Replace(".", ",");

    }


    xlWorkBook.Close(true, null, null);
    xlApp.Quit();
    releaseObject(xlWorkSheet);
    releaseObject(xlWorkBook);
    releaseObject(xlApp);


    return dt;
    }


    private void releaseObject(object obj) 
    {
    try
    {
    System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
    obj = null;
    }
    catch (Exception ex)
    {
    obj = null;
    MessageBox.Show("Unable to release the Object " + ex.ToString());
    }
    finally
    {
    GC.Collect();
    }
    }



    ReleaseObject metodu; Excel açık kalırsa saçma sapan hatalar verdiği için kullanılıyor. Stackoverflow' da zamanında araştırırken denk gelmiştim. Tabi kodlar biraz karışık fakat temel kısımları anlaşılıyor.

    Edit: SQL'de ki nokta ve virgül farkları yüzünden onları da değiştiriyor. Formül ekleyen ve hesaplama yapan bir metod daha var istenirse paylaşabilirim.



    < Bu mesaj bu kişi tarafından değiştirildi ElwinVanDyke -- 23 Eylül 2016; 10:05:58 >




  • Teşekkür ederim arkadaşlar sağolun.
  • Kusura bakmayın yorumu biraz geç gördüm. O zamanlar başka bir projeye yazdığım için şuan kaynak kodlar yok fakat o zaman ki uygulamadığım yöntemi hatırlıyorum. Sorun biraz da o sayfada ki aspx ve c# kaynaklı bir sorundu. Bende bir tane paravan sayfa hazırlayıp response.writre ile parametreli bir şekilde paravan sayfaya yönlendirip page loadın da da excele aktarma işlemini yapmıştım sorun çözülmüştü. (Excele aktarma kodları aynı idi)
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.