De l'écriture à un Fichier Excel à l'aide de c#
Je suis en train d'essayer d'ouvrir (ou de créer un nouveau xls) fichier Excel et d'écrire des valeurs. Bien que le programme ci-dessous fonctionne très bien si il suffit de créer un nouveau fichier xls, je rencontre le problème en ligne
**mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);**
Voici l'erreur:
'LOG.xls" ne peut pas être consulté. Le fichier peut être endommagé, situé sur un serveur qui ne répond pas, ou en lecture seule.
Ce n'est pas en lecture seule, ce n'est pas corrompu(parce que parfois, le fichier est créé sur le Temps d'Exécution).
Quel est le problème alors?
private static Microsoft.Office.Interop.Excel.Workbook mWorkBook;
private static Microsoft.Office.Interop.Excel.Sheets mWorkSheets;
private static Microsoft.Office.Interop.Excel.Worksheet mWSheet1;
private static Microsoft.Office.Interop.Excel.Application oXL;
private void btnSignIn_Click ( object sender, EventArgs e )
{
string path = "D:\\LOG.xls";
if(!File.Exists(path))
{
File.Create (path);
}
oXL = new Microsoft.Office.Interop.Excel.Application ();
oXL.Visible = true;
oXL.DisplayAlerts = false;
//error on this line
mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
//Get all the sheets in the workbook
mWorkSheets = mWorkBook.Worksheets;
//Get the allready exists sheet
mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item ("Sheet1");
Microsoft.Office.Interop.Excel.Range range = mWSheet1.UsedRange;
int colCount = range.Columns.Count;
int rowCount = range.Rows.Count;
for ( int index = 1; index < 15; index++ )
{
mWSheet1.Cells [rowCount + index, 1] = rowCount + index;
mWSheet1.Cells [rowCount + index, 2] = "New Item" + index;
}
mWorkBook.SaveAs (path, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value);
mWorkBook.Close (Missing.Value, Missing.Value, Missing.Value);
mWSheet1 = null;
mWorkBook = null;
oXL.Quit ();
GC.WaitForPendingFinalizers ();
GC.Collect ();
GC.WaitForPendingFinalizers ();
GC.Collect ();
}
OriginalL'auteur SLearner | 2013-05-23
Vous devez vous connecter pour publier un commentaire.
L'aide de
File.Create
n'est pas approprié ici. Elle renvoie une (Vide)FileStream
, pas un Fichier Excel (Définir le chemin d'accès .xls ne va pas créer un Fichier Excel...).Et que vous ne fermez pas et mettez-la au rebut, vous avez une exception lorsque vous essayez de l'ouvrir, car il est déjà en cours d'utilisation (et vous en aurez une exception de toute façon, même si vous la relâchez, parce que vous n'avez pas à créer un fichier Excel à ce stade).
Donc, si le classeur est créé, vous pouvez l'ouvrir en utilisant
oXL.Workbooks.Open
.Si le classeur n'existe pas, VOUS AVEZ créé à l'aide d':
oXL.Workbooks.Add(
) et puis vous appelezmWorkBook.SaveAs(...)
méthode pour vraiment créer.(Espérons que le VB=>C# est correct!)
Et dans votre SaveAs méthode, vous aurez à définir la bonne
FileFormat
si vous souhaitez créer une version spécifique d'un fichier Excel (de nouveau ensemble .xls dans le chemin d'accès n'est pas assez...)Espère que cette aide.
OriginalL'auteur Chris
Si le classeur n'existe pas, la meilleure façon de créer une serait en tant que tel:
Fichier.Créer() renvoie une instance de FileStream, dont vous avez besoin à proximité si vous souhaitez accéder au fichier. Vous pouvez changer..
à
OriginalL'auteur Darren Young