2015-02-09 11 views
6

Utworzono kod w języku C#, który tworzy i zapisuje plik Excela. Kod może z powodzeniem utworzyć i zapisać plik Excela, ale po otwarciu utworzonego pliku Excel wyświetla komunikat ostrzegawczy "Format pliku i rozszerzenie pliku" plik.xls "nie pasują. Plik może być uszkodzony lub niebezpieczny. Jeśli nie ufasz jego źródłu, nie otwieraj go. Czy mimo to chcesz go otworzyć? ". Używam następującego kodu:Jak naprawić format pliku i rozszerzenie nie pasują?

private void button1_Click(object sender, EventArgs e) 
    { 
     saveFileDialogSummary.Filter = "Excel Flie|*.xls"; 
     saveFileDialogSummary.FilterIndex = 0; 
     saveFileDialogSummary.RestoreDirectory = true; 
     saveFileDialogSummary.CreatePrompt = true; 
     saveFileDialogSummary.Title = "Export Excel File To"; 

     Excel.Application ExcelApp = new Excel.Application(); 
     ExcelApp.Application.Workbooks.Add(Type.Missing); 
     ExcelApp.Columns.ColumnWidth = 30; 
     for (int i = 0; i < dataGridViewSummary.Rows.Count; i++) 
     { 
      DataGridViewRow row = dataGridViewSummary.Rows[i]; 
      for (int j = 0; j < row.Cells.Count; j++) 
      { 
       ExcelApp.Cells[i + 1, j + 1] = row.Cells[j].ToString(); 
      } 
     } 

     DialogResult res = saveFileDialogSummary.ShowDialog(); 
     if(res == DialogResult.OK){ 
      ExcelApp.ActiveWorkbook.SaveCopyAs(saveFileDialogSummary.FileName); 
      ExcelApp.ActiveWorkbook.Saved = true; 
      ExcelApp.Quit(); 
     } 
    } 

Co należy zrobić, aby uniknąć otrzymywania tego komunikatu ostrzegawczego?

+0

można po prostu używać formatu 'CSV'? – chouaib

+1

Istnieją wartości FormatCode dla każdego smaku pliku EXCEL - użyj tych i nie będziesz musiał się martwić o wersję zainstalowanego klienta. –

+0

Co to jest: "ExcelApp.Application.Workbooks.Add (Type.Missing);'? – DrKoch

Odpowiedz

1

Wiem, że ten problem mógł zostać rozwiązany do tej pory, ale próba pomocy bez modyfikowania kodu może nadal używać formatu .xls i blokować to ostrzeżenie podczas otwierania pliku przez ustawienie rejestru. Otwarte edit reg przejdź do HKEY_CURRENT_USER\Software\Microsoft\Office\14\Excel\Security

Tworzenie DWord z nazwą ExtensionHardening i ustawić wartość na 0.

To może dostać system podatny, ale nie jest to duży problem podczas pracy w sieci organizacji, w -least, gdy jesteś pewien pobierania tego typu dokumentu i źródła.

0

Rozwiązaniem problemu "format pliku i rozszerzenie nie pasują" jest zamknięcie książki pracy ** ($ skoroszyt-> zamknięcie;) ** na końcu po wykonaniu wszystkich niezbędnych zapisów do pliku.

Napotkałem ten sam problem podczas otwierania pliku "XLS" z poczty. Stworzyłem plik i wstawiłem wszystkie moje pliki init i bez zamykania skoroszytu wysyłam pocztę jako załącznik. Później zdałem sobie sprawę, że muszę zamknąć skoroszyt i wysłać jako załącznik.

0

Pliki z rozszerzeniem .xls i .xlsx zawierają różne układy. rozszerzenie .xls jest używane w wersji 2003, a następnie w wersji .xlsx.
Musisz wyeksportować plik excel do formatu .xlsx. Będzie obsługiwał we wszystkich wersjach, w których byłem używany.

Dodaj poniżej DLL do folderu bin
1. ClosedXML.dll
2. DocumentFormat.OpenXml.dll

Kod eksportować do .xlsx

DataTable dt = new DataTable(); 
    //Create column and inser rows 
    using (XLWorkbook wb = new XLWorkbook()) 
    {   
       var ws = wb.Worksheets.Add(dt, Sheetname); 
       HttpContext.Current.Response.Clear(); 
       HttpContext.Current.Response.Buffer = true; 
       HttpContext.Current.Response.Charset = ""; 
       HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
       HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + p_FileName + ".xlsx"); 
       using (MemoryStream MyMemoryStream = new MemoryStream()) 
       { 
        wb.SaveAs(MyMemoryStream); 
        MyMemoryStream.WriteTo(HttpContext.Current.Response.OutputStream); 
        HttpContext.Current.Response.Flush(); 
        HttpContext.Current.Response.End(); 
       } 
    } 
Powiązane problemy