Windows窗体应用程序会replace每次导出的Excel

我写了下面的代码来导出我的本地数据库数据到Excel文件。 事实是,它正在正常工作,但我只想导出与实际date,或只是一个月,如八月,或类似的东西。 除此之外,真正重要的问题是它每次replace以前导出的Excel文件。 我怎样才能改变这件事? 谢谢 !

private void button3_Click_1(object sender, EventArgs e) { var connString = (@"Data Source=" + System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)) + @"\Angajati.sdf"); using (var conn = new SqlCeConnection(connString)) { try { conn.Open(); var query = "SELECT * FROM info "; var command = new SqlCeCommand(query, conn); var dataAdapter = new SqlCeDataAdapter(command); var dataTable = new DataTable(); dataAdapter.Fill(dataTable); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; Int16 i, j; xlApp = new Excel.Application(); xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); for (i = 0; i <= dataGridView1.RowCount - 2; i++) { for (j = 0; j <= dataGridView1.ColumnCount - 1; j++) { xlWorkSheet.Cells[i + 2, j + 1] = dataGridView1[j, i].Value.ToString(); } } //adds column names to excel string[] colNames = new string[dataGridView1.Columns.Count]; int col = 0; foreach (DataGridViewColumn dc in dataGridView1.Columns) colNames[col++] = dc.HeaderText; char lastColumn = (char)(65 + dataGridView1.Columns.Count - 1); xlWorkSheet.get_Range("A1", lastColumn + "1").Value2 = colNames; xlWorkSheet.get_Range("A1", lastColumn + "1").Font.Bold = true; xlWorkSheet.get_Range("A1", lastColumn + "1").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter; xlWorkBook.SaveAs(@"C:\Users\Andrei\Documents\Visual Studio 2010\Projects\Stellwag\Stellwag\db.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); releaseObject(xlWorkSheet); releaseObject(xlWorkBook); releaseObject(xlApp); MessageBox.Show("Salvat cu succes"); } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show("Exception Occured while releasing object " + ex.ToString()); } finally { GC.Collect(); } } 

如果你不想每次都覆盖同一个工作簿,那么你需要指定一个不同的文件名,而不是硬编码。

一些简单的事情,比如用当前的date时间创build文件名就足够了(你可以改变格式来适应你):

 string fileName = @"db " + DateTime.Now.ToString("dd-MM-yyyy HH-mm-ss") + @".xls"; string filePath = Path.Combine(@"C:\Users\Andrei\Documents\Visual Studio 2010\Projects\Stellwag\Stellwag", fileName); xlWorkBook.SaveAs(filePath, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 

这会产生一个像这样的文件:

db 01-09-2015 10-32-35.xls

还没有明确的检查,看看文件是否存在,但除非你每秒钟点击它不可能被覆盖。