none
C# datagridview resimli excel'e aktarma RRS feed

  • Genel Tartışma

  • Merhaba arkadaşlar;

    C#'da datagridview aşağıki kodlar yardımıyla resimli olarak resim atıyorum buraya kadar sıkıntı yok

      tablo.Columns.Add(new DataColumn("resim", typeof(System.Drawing.Bitmap)));
                HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://resim url adresi");
                myRequest.Method = "GET";
                HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
                System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(myResponse.GetResponseStream());
                myResponse.Close();    
                tablo.Rows.Add(bmp);
                dgvCityDetails.DataSource = tablo;

    benim sorunum bu datagridview'i resimli olarak excel'a aktarma internetteki tüm kodları denedim hep sonuç hüsran sonuç aşağıdaki gibi çıkıyor.

    http://prntscr.com/eh1s4f

    Şimdiden yardımcı olan herkese teşekkürü borç bilirim.


    yok

    7 Mart 2017 Salı 11:20

Tüm Yanıtlar

  • İyi de sorun olmayan kodu niye gösteriyorsunuz?! :) Hatalı davranış sergileyen kod nedir?  Lütfen o kısmı paylaşır mısınız?

    7 Mart 2017 Salı 11:51
  • Merhabalar;

    Hocam işte diyorum ya tam olarak nasıl yapabilirim, yada sizin bildiğiniz çalışan kod örneği varmı ? Misal bu kodla excel aktardığınızda resimleri aktarmıyor.

      // Creating a Excel object.
                Microsoft.Office.Interop.Excel._Application excel = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel._Workbook workbook = excel.Workbooks.Add(Type.Missing);
                Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
    
                try
                {
                    
                    worksheet = workbook.ActiveSheet;
    
                    worksheet.Name = "ExportedFromDatGrid";
    
                    int cellRowIndex = 1;
                    int cellColumnIndex = 1;
    
                    //Loop through each row and read value from each column.
                    for (int i = 0; i < dgvCityDetails.Rows.Count - 1; i++)
                    {
                        for (int j = 0; j < dgvCityDetails.Columns.Count; j++)
                        {
                            // Excel index starts from 1,1. As first Row would have the Column headers, adding a condition check.
                            if (cellRowIndex == 1)
                            {
                                worksheet.Cells[cellRowIndex, cellColumnIndex] = dgvCityDetails.Columns[j].HeaderText;
                            }
                            else
                            {
                                worksheet.Cells[cellRowIndex, cellColumnIndex] = dgvCityDetails.Rows[i].Cells[j].Value.ToString();
                            }
                            cellColumnIndex++;
                        }
                        cellColumnIndex = 1;
                        cellRowIndex++;
                    }
    
                    //Getting the location and file name of the excel to save from user.
                    SaveFileDialog saveDialog = new SaveFileDialog();
                    saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*";
                    saveDialog.FilterIndex = 2;
    
                    if (saveDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        workbook.SaveAs(saveDialog.FileName);
                        MessageBox.Show("Export Successful");
                    }               
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    excel.Quit();
                    workbook = null;
                    excel = null;
                }


    yok

    7 Mart 2017 Salı 12:19
  • Ekte çalışan bir proje paylaşıyorum: ExcelResimDataGridView.zip

    Kod şöyle:

    void ResimSakla()
    {
        // Excel uygulamasını başlat, yeni worksheet yarat.
        Excel.Application excelApp = new Excel.Application();
        Excel.Workbook wb = excelApp.Workbooks.Add();
        Excel.Worksheet ws = wb.Worksheets[1];
    
        // DataGridView içine Resources'dan resim yükle.
        ((DataGridViewImageCell)dataGridView1.Rows[0].Cells[0]).Value = Properties.Resources.Resim1;
    
        // DataGridView içindeki resmi önce dosyaya yaz.
        // Not: Bunu, Shapes.AddPicture() resmi dosyadan okumak istediği için yapıyoruz.
        Image resim = (dataGridView1.Rows[0].Cells[0].Value as Image);
        string dgvResim1 = @"C:\Temp\DgvResim1.jpg";
        resim.Save(dgvResim1, System.Drawing.Imaging.ImageFormat.Jpeg);
    
        // Resmin boyutlarını temel alarak hedef Excel hücresini boyutlandır.
        Excel.Range rng = (Excel.Range)ws.Cells[4, 4];
        double colWidth = (resim.Width - 12) / 7d + 1;
        rng.ColumnWidth = colWidth;
        rng.RowHeight = resim.Height * 0.75d;
    
        // Dosyadaki resmi worksheet içinde belirli hücreye sakla.
        ws.Shapes.AddPicture(
            dgvResim1,
            Microsoft.Office.Core.MsoTriState.msoFalse,
            Microsoft.Office.Core.MsoTriState.msoCTrue,
            (float)((double)rng.Left),
            (float)((double)rng.Top),
            -1, -1
        );
    
        // Excel worksheet'i sakla, Excel uygulamasını kapat.
        wb.Save();
        wb.Close();
        Marshal.ReleaseComObject(excelApp);
    }


    References -> COM sekmesinden aşağıdaki iki DLL'i projenize ekleyin:

    Microsoft Office 16.0 Object Library (Projede Microsoft.Office.Core olarak görünecektir.)
    Microsoft Excel 16.0 Object Library (Projede Microsoft.Office.Interop.Excel olarak görünecektir.)

    Not: Bu oldukça zor bir konu.  Resim Excel'de hücrenin içine girmiyor, hücrenin üzerinde "yüzüyor" (float).  Yani hücreyle birlikte hareket ediyor ama hücrenin içinde değil.  Hücreyi resme göre boyutlandırmak ise ayrı bir zorluk!  Hücre genişliğini hesaplayan kod düzgün çalışıyor fakat satır yüksekliğini ancak tahmini hesaplayabildim.  Excel genişlik ve yükseklik için farklı birimler kullanıyor! Tam bir felaket.



    7 Mart 2017 Salı 20:08