Comment puis-je enregistrer un fichier Excel sans l'obtention d'un format d'avertissement lors de l'ouverture, à l'aide de C# et Excel 2010
Je suis à l'aide d'Excel 2010.
J'essaie donc d'enregistrer mon fichier excel, avec ce code.
Il permet de gagner un .fichier xls, mais quand j'ai ouvert le fichier, j'obtiens ce message:
Le fichier que vous essayez d'ouvrir, 'tre.xls' est dans un format différent de celui spécifié par l'extension de fichier. Vérifiez que le fichier n'est pas corrompu et est d'une charriés source avant de l'ouverture du fichier. Voulez-vous ouvrir le fichier maintenant?
Si je presse yes
le fichier s'ouvre. Mais de quoi ai-je besoin pour se débarrasser de ce format-popup?
Mon code:
using System;
using System.Windows.Forms;
using ExcelAddIn1.Classes;
using ExcelAddIn1.Classes.Config;
using Microsoft.Office.Interop.Excel;
using Application = Microsoft.Office.Interop.Excel.Application;
using System.Runtime.InteropServices;
private void Foo(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = true;
saveFileDialog.FileName = null;
saveFileDialog.Title = "Save path of the file to be exported";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
//Save.
//The selected path can be got with saveFileDialog.FileName.ToString()
Application excelObj =
(Application)Marshal.GetActiveObject("Excel.Application");
Workbook wbook = excelObj.ActiveWorkbook;
wbook.SaveAs(saveFileDialog.FileName, XlFileFormat.xlWorkbookDefault,
Type.Missing, Type.Missing, false, false,
XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing);
wbook.Close();
}
}
Quand je l'ai enregistrer dans excel normalement je reçois "Book1.xlsx", qui n'ont pas de problème pour l'ouvrir.
============= LA SOLUTION FINALE ============
private void Foo(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Execl files (*.xls)|*.xls";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = true;
saveFileDialog.FileName = null;
saveFileDialog.Title = "Save path of the file to be exported";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
Application excelObj = (Application)Marshal.GetActiveObject("Excel.Application");
Activate(); //<-- added (recommend by msdn, but maybe not nessary here)
Workbook wbook = excelObj.ActiveWorkbook;
wbook.SaveAs(saveFileDialog.FileName, XlFileFormat.xlExcel8, Type.Missing,
Type.Missing, false, false, XlSaveAsAccessMode.xlNoChange, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);
// wbook.Close(); //<-- don't want this anymore
}
}
J'ai essayé avec .xlsx format de combiner avec un flux plus tôt (au lieu de l'enregistrer avec le wbook) mais alors je pouvais pas ouvrir le fichier. Je vais essayer saveFileDialog.Filtre = "Execl fichiers (.xlsx)|.xlsx"; combiné le wbook.SaveAs() solution maintenant.
OriginalL'auteur radbyx | 2012-05-08
Vous devez vous connecter pour publier un commentaire.
Avec votre code vous enregistrez le classeur en tant que Open XML parce que
XlFileFormat.xlWorkbookDefault
évalue àXlFileFormat.xlOpenXMLWorkbook
pour Excel 2007+. C'est la raison de l'avertissement: vous avez nommé le fichier XLS mais en fait c'est un XLSX.Vous pouvez changer l'extension du fichier xlsx dans votre
saveFileDialog.Filter
de la propriété ou de la force de l'objet Excel pour enregistrer dans le format XLS en utilisantXlFileFormat.xlExcel8
.MODIFIER
Utilisez-le pour enregistrer votre document:
saveFileDialog.Filter = "Execl files (*.xlsx)|*.xlsx";
et etXlFileFormat.xlExcel8
et il a encore dosn pas de travail.Je comprends la première partie, mais je ne vois plus ce que je peux essayer. Puis-je vous demander de mettre à jour votre réponse, lorsque vous ajoutez mon code dans une version éditée comme votre serait-il le faire?
Il fonctionne - excellente réponse je vous Remercie. Je vais modifier ma dernière solution à ma question, pour d'autres, il a quelques autres belles trop de changements.
OriginalL'auteur Adriano Repetti
essayer de définir des alertes sur OFF
OriginalL'auteur user1327073
Ce problème résulte d'une fonctionnalité appelée Extension de Durcissement, et vous pouvez trouver plus d'informations à ce sujet ici.
Malheureusement, le lien ci-dessus indique également qu'il n'existe pas de changements prévus au présent code, au moins jusqu'au Bureau de 14.
Si vous n'avez pas envie de chercher une solution, mais juste envie de résoudre le problème, insérer cette clé dans le registre pour supprimer la notification:
Vous pouvez y arriver en faisant ce qui suit:
Ouvrir votre base de Registre (Commencer -> Exécuter ->
regedit.exe
).Accédez à
HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\12.0\EXCEL\SECURITY
.Clic droit dans la fenêtre de droite et choisissez Nouveau -> DWORD
Type “
ExtensionHardening
” que le nom (sans les guillemets)Vérifier que les données de la valeur "
0
".Si vous êtes bon, pour permettre le codage en dur de l'extension de fichier excel puis, la démarche proposée par Adriano est le mieux pour vous.
OriginalL'auteur Romil Kumar Jain