none
C# İle Excel Dosyası Oluşturma işlemi yaptıktan sonra excel dosyası açılmıyor. RRS feed

  • Genel Tartışma

  • Merhaba arkadaşlar ;

    Amacım butona tıklandığında istediğim klasöre excel dosyası oluşturmak.. istediğim gibi exceli oluşturuyorum ama oluşturduğum excel dosyası windowsta açarken hata alıyorum.

    HATANIN İSMİ  cannot open the file  'deneme.xlsx' because the file format ar for file format or filex extension is not vaild. Verify that the file has not been corrupted and that the file extentions matches the format of the file uyarısı veriyor. Bunun sebebini bilen bir arkadaşlar yardımcı olursanız çok sevinirim. İyi günler.

    Not: Yazdığım kod örneği aşağıdaki gibidir.

    --------------------

                

                dataGridView1.ColumnCount = 6; 
                dataGridView1.Columns[0].Name = "İSİM";
                dataGridView1.Columns[1].Name = "SOYİSİM";
                dataGridView1.Columns[2].Name = "TC";
                dataGridView1.Columns[3].Name = "DOĞUM TARİHİ";
                dataGridView1.Columns[4].Name = "GSM";
                dataGridView1.Columns[5].Name = "CİNSİYET";

                string ad = textBox1.Text;
                string soyad = textBox2.Text;
                string tc = textBox3.Text;
                string dogum = maskedTextBox1.Text;
                string gsm = maskedTextBox2.Text;
                string cınsıyet = comboBox1.Text;
                string file ="C:\\....\\.....\\.....\\.....\\......\\......\\......\\.....\\......\\deneme.xlsx";
                dataGridView1.Rows.Add(ad, soyad, tc, dogum, gsm, cınsıyet);
                Workbook workbook = new Workbook();
                Worksheet worksheet = new Worksheet("SAYFA1");
                workbook.Worksheets.Add(worksheet);
                workbook.Save(file);


    21 Ocak 2019 Pazartesi 06:58

Tüm Yanıtlar

  • yanlış bilmiyorsam xlsx değilde xls formatında kaydeder. Dosya uzantısını xls yapıp denermisin.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    21 Ocak 2019 Pazartesi 10:34
    Moderatör
  • Xls olarakta denedim aynı hatayı veriyor efendim.
    21 Ocak 2019 Pazartesi 10:35
  • Peki interop kullanmanız şart mı? OleDB ile bağansanız daha rahat edersiniz sanırım.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    21 Ocak 2019 Pazartesi 10:38
    Moderatör
  • Benim amacım datagride yazılan bilgiyi excel olarak kayıt etmesi efendim. o yüzden böyle bir kod yazdım. Sizin bildiğiniz farkı bi yöntem varsa paylaşabilirmisiniz.
    21 Ocak 2019 Pazartesi 10:45
  • anydesk id verebilirmisiniz


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    21 Ocak 2019 Pazartesi 11:00
    Moderatör
  • Şuan işyerindeyim efendim.. buradan yazarsanız örnek olarak. anlamaya çalışırım. İlginiz için teşekkürler
    21 Ocak 2019 Pazartesi 11:14
  • OleDbConnection ile bağlanın. Database'e kayıt ekler gibi satır ekleyin/silin. Connection string ise buradaki gibi


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    21 Ocak 2019 Pazartesi 11:39
    Moderatör
  • Excel.Application excel = new Excel.Application();
                    excel.Visible = true;
                    object Missing = Type.Missing;
                    Workbook workbook = excel.Workbooks.Add(Missing);
                    Worksheet sheet1 = (Worksheet)workbook.Sheets[1];
                                    
    
                    int StartCol = 1;
                    int StartRow = 1;
    
                    for (int x = 0; x < datagrid_adı.SelectedRows.Count; x++)
                    {
                        for (int j = 0; j < datagrid_adı.SelectedRows[x].Cells.Count; j++)
    
                        {
    
                            Range myRange = (Range)sheet1.Cells[StartRow, StartCol + j];
                            myRange.Value2 = datagrid_adı.SelectedRows[x].Cells[j].Value == null ? "" : datagrid_adı.SelectedRows[x].Cells[j].Value;
                        }
                        StartRow++;
    bu kodu butonun clik olayına yazıp deneyebilirsin. seçili satırı excel'e aktarıyor. kaydet diyip kaydedebilirsin
    21 Ocak 2019 Pazartesi 12:51
  • Verdiğiniz bu kod örneği için teşekkür ederim. Lakin istediğim şekilde olmadı. Biyerde datagride bilgi gitmesi için eksik yazılması gereken bir kod var gibi.
    21 Ocak 2019 Pazartesi 19:16
  • Arkadaşlar sorunu çözemedim halen. Bilen arkadaşlar farklı yöntem veya kod örneği gösterebilirse çok sevinirim. İyi günler.
    22 Ocak 2019 Salı 11:25
  • Önce projeye Add Reference sekmesinin COM menüsünden "Microsoft Excel 16.0 Object Library" ekleyin ardından excel oluşturmak istediğiniz formun en üst kısmına şu kodu ekleyin:

    using Excel=Microsoft.Office.Interop.Excel;

    'Excel=' ifadesi form uygulamasında ve excel uygulamasında bulunan Buton kontrollerinin çakışmasını engellemenizi sağlayacaktır.

    Butonun içine şu kodları ekleyin:

                    Excel.Application excel = new Excel.Application();
                    excel.Visible = true;
                    object missing = Type.Missing;
                    Excel.Workbook workbook = excel.Workbooks.Add(Missing);
                    Excel.Worksheet sheet1 = (Excel.Worksheet)workbook.Sheets[1];
                                    
    
                    int StartCol = 1;
                    int StartRow = 1;
    
                    for (int x = 0; x < datagrid_adı.SelectedRows.Count; x++)
                    {
                        for (int j = 0; j < datagrid_adı.SelectedRows[x].Cells.Count; j++)
    
                        {
    
                            Excel.Range myRange = (Excel.Range)sheet1.Cells[StartRow, StartCol + j];
                            myRange.Value2 = datagrid_adı.SelectedRows[x].Cells[j].Value == null ? "" : datagrid_adı.SelectedRows[x].Cells[j].Value;
                        }
                        
           workbook.SaveAs("Dosyayolu(düzlem aralarına 2 tane '\' koyun)"+"\\dosyaadi.xls", Excel.XlFileFormat.xlWorkbookNormal, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, missing, missing);

    bu kodun datagriddeki verileri seçtikten sonra butona basarsanız bilgileri excele kaydetmesi lazım

    Eğer hata alırsanız hatayı burada da belirtin 



    22 Ocak 2019 Salı 13:54
  • Önce projeye Add Reference sekmesinin COM menüsünden "Microsoft Excel 16.0 Object Library" ekleyin ardından excel oluşturmak istediğiniz formun en üst kısmına şu kodu ekleyin:

    using Excel=Microsoft.Office.Interop.Excel;

    'Excel=' ifadesi form uygulamasında ve excel uygulamasında bulunan Buton kontrollerinin çakışmasını engellemenizi sağlayacaktır.

    Butonun içine şu kodları ekleyin:

                    Excel.Application excel = new Excel.Application();
                    excel.Visible = true;
                    object missing = Type.Missing;
                    Excel.Workbook workbook = excel.Workbooks.Add(Missing);
                    Excel.Worksheet sheet1 = (Excel.Worksheet)workbook.Sheets[1];
                                    
    
                    int StartCol = 1;
                    int StartRow = 1;
    
                    for (int x = 0; x < datagrid_adı.SelectedRows.Count; x++)
                    {
                        for (int j = 0; j < datagrid_adı.SelectedRows[x].Cells.Count; j++)
    
                        {
    
                            Excel.Range myRange = (Excel.Range)sheet1.Cells[StartRow, StartCol + j];
                            myRange.Value2 = datagrid_adı.SelectedRows[x].Cells[j].Value == null ? "" : datagrid_adı.SelectedRows[x].Cells[j].Value;
                        }
                        
           workbook.SaveAs("Dosyayolu(düzlem aralarına 2 tane '\' koyun)"+"\\dosyaadi.xls", Excel.XlFileFormat.xlWorkbookNormal, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, missing, missing);

    bu kodun datagriddeki verileri seçtikten sonra butona basarsanız bilgileri excele kaydetmesi lazım

    Eğer hata alırsanız hatayı burada da belirtin 



    Verdiğiniz cevap için teşekkür ederim. Lakin workbook.SaveAs kısmında dosya yolu düzenini anlayamadım efendim. Şöyle mi demek istediniz.

    C:"\\Users\YUNUS\\Desktop\\deneme.xls"; bu şekilde yaptım. programı çalıştırdığımda

    No overload for method 'SaveAs' takes '9' arguments hatasını alıyorum.
    23 Ocak 2019 Çarşamba 05:22

  •  workbook.SaveAs(@"C:\Users\YUNUS\Desktop\deneme.xls", Excel.XlFileFormat.xlWorkbookNormal, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, missing, missing)

    bu şekilde dener misiniz ? Bir de versiyon farkı problem olabilir emin değilim. Ben office 2016 kullanıyorum ve SaveAs metodu 9 parametre alabiliyor. Bende bu hatayı vermedi. 


    23 Ocak 2019 Çarşamba 12:04
  • string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\DosyaAdi.xlsx";
    
    

    Bence Path'i de bu şekilde girin. Orada belirttiğiniz kullanıcı, farklı bir bilgisayarda olmaz. Sorun yaşayabilirsiniz.

    İletişim

    23 Ocak 2019 Çarşamba 12:29
    Moderatör

  •  workbook.SaveAs(@"C:\Users\YUNUS\Desktop\deneme.xls", Excel.XlFileFormat.xlWorkbookNormal, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, missing, missing)

    bu şekilde dener misiniz ? Bir de versiyon farkı problem olabilir emin değilim. Ben office 2016 kullanıyorum ve SaveAs metodu 9 parametre alabiliyor. Bende bu hatayı vermedi. 


    Verdiğiniz kod sayesinde istediğim gibi oluyor. En azından excel açılırken hata vermiyor. Fakat datagride yazdığım veriler excele aktarmıyor. Excel sayfası boş olarak geliyor efendim. Bunada el atabilirseniz çok memnun olacağım. İlginizden dolaya çok teşekkür ederim.
    23 Ocak 2019 Çarşamba 17:13
  •      

    for(int i=0;i<datagrid_adı.Columns.Count;i++)

    {

    Excel.Range myRange = (Excel.Range)sheet1.Cells[StartRow, StartCol + i];
                            myRange.Value2 = datagrid_adı.Columns[i].ColumnName;

    }

    StartRow++;

    for (int x = 0; x < datagrid_adı.Rows.Count; x++) { for (int j = 0; j < datagrid_adı.Rows[x].Cells.Count; j++) { Excel.Range myRange = (Excel.Range)sheet1.Cells[StartRow, StartCol + j]; myRange.Value2 = datagrid_adı.Rows[x].Cells[j].Value == null ? "" : datagrid_adı.Rows[x].Cells[j].Value; } }

    for döngüsünü bununla değiştirip dener misiniz 


    23 Ocak 2019 Çarşamba 21:36
  •      

    for(int i=0;i<datagrid_adı.Columns.Count;i++)

    {

    Excel.Range myRange = (Excel.Range)sheet1.Cells[StartRow, StartCol + i];
                            myRange.Value2 = datagrid_adı.Columns[i].ColumnName;

    }

    StartRow++;

    for (int x = 0; x < datagrid_adı.Rows.Count; x++) { for (int j = 0; j < datagrid_adı.Rows[x].Cells.Count; j++) { Excel.Range myRange = (Excel.Range)sheet1.Cells[StartRow, StartCol + j]; myRange.Value2 = datagrid_adı.Rows[x].Cells[j].Value == null ? "" : datagrid_adı.Rows[x].Cells[j].Value; } }

    for döngüsünü bununla değiştirip dener misiniz 


     Teşekkür ederim efendim şimdi oldu. Verdiğiniz kod işe yaradı. Ata bey size özelden nasıl ulaşabilirim efendim. Sizinle konusmam gerekiyor yardımcı olursanız çok sevinirim.
    24 Ocak 2019 Perşembe 16:47
  • atakemalatasoy@hotmail.com.tr adresine mail atabilirsiniz. 
    25 Ocak 2019 Cuma 19:23