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?
Il suffit de changer le fichier .xls en .xlsx si le dernier bureau est installé.
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.
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.
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();
}
}