如何自动查找文件而不实际知道C#windows应用程序表单

时间:2017-07-14 03:31:32

标签: c# excel c#-4.0

我需要帮助我的c#应用程序,我的应用程序基本完成只需要一个小调整,应该完成。

我的程序有很多功能。但我需要帮助的是以下内容:

我的程序会让用户先创建一个excel文件,在那里我有三个按钮,第一个按钮打开,将打开用户创建的创建文件,用户将文件保存在任何位置,但是当按钮打开时需要找到用户保存文件的文件。如果我手动放置文件的特定位置的位置,现在按钮将工作。但我的应用程序将使用它很多用户。并且每个用户都将自己的文件保存在任何目录位置。我还有一个按钮,可以将数据保存到excel文件,也可以关闭它,但只要打开文件工作,这些按钮就可以正常工作。

这部分代码将创建并保存到所需的用户位置。然后打开按钮功能需要自动查找从计算机目录创建的最新文件。正如我之前所说,如果我把特定位置打开按钮工作,但我不想放置文件的特定位置,因为用户将选择excel文件的位置。

    private void tlpMenuItem_SaveAs_Click(object sender, EventArgs e)
    {


        string sd;
        svFileDialog_SaveButton.ShowDialog();
        //saveFileDialog1.InitialDirectory = "c:";
        svFileDialog_SaveButton.Filter = "Excel File|*.xlsx|All Files|*.*";
        Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
        ExcelApp.Application.Workbooks.Add(Type.Missing);
        ExcelApp.Columns.ColumnWidth = 20;
        sd = svFileDialog_SaveButton.FileName;
        ExcelApp.ActiveWorkbook.SaveCopyAs(sd + ".xlsx");
        ExcelApp.ActiveWorkbook.Saved = true;
        ExcelApp.Quit();
        MessageBox.Show("Excel file created");

    }
    private void OpenFile()
    {

        string findFile = "";
        xlexcel = new Excel.Application();

        xlexcel.Visible = true;

        // Open a File
        xlWorkBook = xlexcel.Workbooks.Open("C:\MyFile.xlsx", 0, true, 5, "", "", true,
        Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        xlWorkSheet.Cells[1, 1] = "Username";
        xlWorkSheet.Cells[1, 2] = "Password";
        xlWorkSheet.Cells[1, 3] = "Warehouse Location";
        xlWorkSheet.Cells[1, 4] = "Date";
    }

这是我创建的文件的完整代码,打开,保存数据和关闭excel文件

    private void tlpMenuItem_SaveAs_Click(object sender, EventArgs e)
    {


        string sd;
        svFileDialog_SaveButton.ShowDialog();
        //saveFileDialog1.InitialDirectory = "c:";
        svFileDialog_SaveButton.Filter = "Excel File|*.xlsx|All Files|*.*";
        Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
        ExcelApp.Application.Workbooks.Add(Type.Missing);
        ExcelApp.Columns.ColumnWidth = 20;
        sd = svFileDialog_SaveButton.FileName;
        ExcelApp.ActiveWorkbook.SaveCopyAs(sd + ".xlsx");
        ExcelApp.ActiveWorkbook.Saved = true;
        ExcelApp.Quit();
        MessageBox.Show("Excel file created");

    }
    private void OpenFile()
    {

        string findFile = "";
        xlexcel = new Excel.Application();

        xlexcel.Visible = true;

        // Open a File
        xlWorkBook = xlexcel.Workbooks.Open("C:\MyFile.xlsx", 0, true, 5, "", "", true,
        Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        xlWorkSheet.Cells[1, 1] = "Username";
        xlWorkSheet.Cells[1, 2] = "Password";
        xlWorkSheet.Cells[1, 3] = "Warehouse Location";
        xlWorkSheet.Cells[1, 4] = "Date";
    }
    private void SaveDataToAFile()
    {
        int _lastRow = xlWorkSheet.Range["A" + xlWorkSheet.Rows.Count].End[Excel.XlDirection.xlUp].Row + 1;

        xlWorkSheet.Cells[_lastRow, 1] = txt_Username.Text;
        xlWorkSheet.Cells[_lastRow, 2] = txt_Password.Text;
        xlWorkSheet.Cells[_lastRow, 3] = cmb_DatabaseSelection.SelectedIndex.ToString();
        xlWorkSheet.Cells[_lastRow, 4] = DateTime.Now;
    }

    private void CloseFile()
    {
        xlWorkBook.Close(true, misValue, misValue);
        xlexcel.Quit();

        ReleaseObject(xlWorkSheet);
        ReleaseObject(xlWorkBook);
        ReleaseObject(xlexcel);
    }

    private void ReleaseObject(object obj)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
            obj = null;
        }
        catch (Exception ex)
        {
            obj = null;
            MessageBox.Show("Unable to release the Object " + ex.ToString());
        }
        finally
        {
            GC.Collect();
        }
    }

1 个答案:

答案 0 :(得分:0)

我的建议是创建一个变量来保存用户保存时的文件路径。您可以使用以下方式执行此操作:

    String filepath; //global variable

    Stream stream;
    SaveFileDialog sf = new SaveFileDialog();
    if(sf.ShowDialog() == true)
    {
            if((stream = sf.OpenFile()) != null)
            {
                    filepath = sf.FileName; 
                    //Do save work
            }
    }