web-dev-qa-db-fra.com

Comment corriger le format de fichier et l'extension ne correspondent pas?

J'ai créé un code en c # qui crée et enregistre un fichier Excel. Le code peut créer et enregistrer avec succès un fichier Excel, mais lorsque j'ouvre le fichier Excel créé, il affiche un message d'avertissement indiquant que "Le format et l'extension de fichier" nomfichier.xls "ne correspondent pas. Le fichier peut être corrompu ou dangereux. Ne l'ouvrez pas, sauf si vous avez confiance en sa source. Voulez-vous l'ouvrir quand même? ". J'utilise le code suivant:

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();
        }
    }

Que dois-je faire pour éviter de recevoir ce message d'avertissement?

7
ThEpRoGrAmMiNgNoOb

Il suffit de changer le fichier .xls en .xlsx si le dernier bureau est installé.

4
ThEpRoGrAmMiNgNoOb

Je sais que ce problème est peut-être résolu à présent, mais le simple fait d'essayer de vous aider sans modifier le code peut toujours utiliser le format .xls et supprimer cet avertissement lors de l'ouverture du fichier en définissant un registre. Ouvrez reg edit, accédez à HKEY_CURRENT_USER\Software\Microsoft\Office\14\Excel\Security

Créez une DWord avec le nom ExtensionHardening et définissez la valeur sur 0.

Cela pourrait rendre votre système vulnérable, mais ce n’est pas très grave lorsque vous travaillez dans un réseau d’organisation, du moins lorsque vous êtes sûr de télécharger le type de document et la source.

4
ninja_md

La solution pour "le format et l'extension de fichier ne correspondent pas" est de fermer le classeur ** ($ classeur-> fermer;) ** enfin après que tous les écrits nécessaires aient été faits dans le fichier.

J'ai rencontré le même problème lors de l'ouverture du fichier "XLS" à partir du courrier. J'ai créé un fichier et inséré toutes mes données init et sans fermer le classeur, j'envoie le courrier en pièce jointe. Plus tard, j'ai réalisé que je devais fermer le classeur et l'envoyer en pièce jointe.

0
Pushkar

L'extension de fichier .xls et le fichier .xlsx contiennent une disposition différente. l'extension .xls utilise en version 2003 alors que l'extension en version .xlsx est à utiliser.
Vous devez exporter le fichier Excel au format .xlsx. Il supportera dans toutes les versions que j'ai utilisées.

Ajouter ci-dessous DLLS dans le dossier bin
1. ClosedXML.dll
2. DocumentFormat.OpenXml.dll

Code à exporter en .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();
                }
     }
0
Jitendra G2