Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
10
Cevap
1657
Tıklama
0
Öne Çıkarma
Asp.net , Office.Interop.Excel Referansını Kullanarak Excel’e Aktarma Sorunu
G
9 yıl
Yüzbaşı

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 >
Bu mesaja 1 cevap geldi.
E
9 yıl
Yarbay

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 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @Gabriel.Espaso
E
10 yıl
Teğmen
Konu Sahibi

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)).
< Resime gitmek için tıklayın >

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



V
10 yıl
Yüzbaşı

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



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
E
10 yıl
Teğmen
Konu Sahibi

dll li yükledim daha sonra ofisi de kurdum fakat u sefer de aşağıdaki hatayı verdi.
< Resime gitmek için tıklayın >




Bu mesajda bahsedilenler: @veli_0300
V
10 yıl
Yüzbaşı

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ı >
Bu mesaja 1 cevap geldi.
E
10 yıl
Teğmen
Konu Sahibi

Bilgi için saolun hocam fakat sorunu çözemeyince forum sitelerinden excele aktarma kodları ile sorunu çözmüştüm


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @veli_0300
S
9 yıl
Teğmen

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 ?


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @EfeUğur
E
9 yıl
Yarbay

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ı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @SercanBaydar09
S
9 yıl
Teğmen

Teşekkür ederim arkadaşlar sağolun.


Bu mesaja 1 cevap geldi.
E
9 yıl
Teğmen
Konu Sahibi

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)



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.