Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每次导出excel时,Windows窗体应用程序都会替换_C#_Excel_Winforms_Localdb - Fatal编程技术网

C# 每次导出excel时,Windows窗体应用程序都会替换

C# 每次导出excel时,Windows窗体应用程序都会替换,c#,excel,winforms,localdb,C#,Excel,Winforms,Localdb,我编写了以下代码,用于将本地数据库数据导出到excel文件。事实上,它工作正常,但我只想导出它的实际日期,或只是月份,如8月,或类似的东西。除此之外,真正重要的问题是它每次都会替换以前导出的excel文件。我怎样才能改变这件事?谢谢 private void button3_Click_1(object sender, EventArgs e) { var connString = (@"Data Source=" + System.IO.Path.Co

我编写了以下代码,用于将本地数据库数据导出到excel文件。事实上,它工作正常,但我只想导出它的实际日期,或只是月份,如8月,或类似的东西。除此之外,真正重要的问题是它每次都会替换以前导出的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();
            }
        }
private void按钮3\u单击1(对象发送方,事件参数e)
{
var connString=(@“数据源=“+System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.getExecutionGassembly().Location))+@“\Angajati.sdf”);
使用(var conn=new SqlCeConnection(connString))
{
尝试
{
conn.Open();
var query=“从信息中选择*”;
var命令=新的SqlCeCommand(查询,连接);
var dataAdapter=newsqlcedataadapter(命令);
var dataTable=新的dataTable();
dataAdapter.Fill(dataTable);
}
捕获(例外情况除外)
{
Show(例如ToString());
}
}
Excel.applicationxlapp;
Excel.工作簿;
Excel工作表;
对象错误值=System.Reflection.Missing.Value;
int16i,j;
xlApp=new Excel.Application();
xlWorkBook=xlApp.Workbooks.Add(错误值);
xlWorkSheet=(Excel.Worksheet)xlWorkBook.Worksheets.get_项(1);

对于(i=0;i如果不希望每次都覆盖同一工作簿,则需要指定不同的文件名,而不是硬编码

使用当前日期时间创建文件名这样的简单操作通常就足够了(您可以根据自己的需要更改格式):

这将生成如下文件:

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


仍然没有明确检查文件是否存在,但除非您每秒单击一次,否则不太可能覆盖。

如果您不希望每次都替换
db.xls
,我建议您在每次保存时使用不同的名称。可能是从当前日期/时间派生的名称?您的意思是要筛选报告以指定c日期期间?在var query=“SELECT*FROM info”中修改查询;你的意思是你想更新文件的某些内容,而不是整个文件吗?不。我不想每次都替换。每次按下按钮都有单独的文件。这是因为我是一个白痴,在文件名中添加了
,改为
-
。还将
XLSX
改为
XLS
。现在试试;-)解决了。效果很好。路径也有问题。非常感谢先生!很高兴我能帮忙,没问题!:-)
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);