【问题标题】:How to find a file automatically without actually knowing the full path file in directory in C# windows application Form如何在不知道 C# windows 应用程序窗体中目录中的完整路径文件的情况下自动查找文件
【发布时间】:2017-12-19 00:46:55
【问题描述】:

我的 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();
        }
    }

【问题讨论】:

  • 不明白你的问题。
  • 听起来你想提示用户选择带有OpenFileDialogSaveFileDialog的文件,对吗?
  • 嗯...我猜不是,因为您的代码已经使用了它们。好吧,我也不知道你在问什么。
  • 用户将一个excel文件保存到他们计算机的任何位置,他们将命名文件然后保存,然后我的打开按钮将在他们单击打开文件按钮后找到该文件的位置。 .是的,以保存我正在使用 saveFileDialog 的文件。我的程序是否可以找到用户创建的文件的位置?
  • 保存文件时,您可以将其位置保存在您的变量之一中。简单来说,将您的 sd 变量设为实例变量(具有正确的名称)。然后你可以在你的OpenFile 方法中引用这个。

标签: c# excel c#-4.0


【解决方案1】:

我的建议是创建一个变量来保存用户保存时的文件路径。你可以这样做:

    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
            }
    }

【讨论】:

  • 你好乔,我能够设法添加你的代码,但我收到一个错误 if(sf.ShowDialog() == true) 是错误来自 ==,也我将如何将全局变量 filePath 引用到 openfile 按钮,我试图添加但给了我一个错误。 // 打开一个文件 xlWorkBook = xlexcel.Workbooks.Open(filepath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, 真, 1, 0);
  • 抱歉,这可能是我的错误,因为我在输入之前没有查看您的代码。由于您已经有了 sf.ShowDialog(),因此您不需要 if() 语句,但您真正需要的只是 sf.FileName 部分。我看到你已经在使用它了,这很棒。现在最后一步是创建全局变量,可能在包含这两种方法的类中。只是为了澄清应该在 SaveFile 函数之外声明全局变量,以便 OpenFile 也可以访问它。
  • 我添加了全局变量filePath,但现在在我关闭我的应用程序并选择操作文件按钮后出现错误此错误远程过程调用失败。 (HRESULT 异常:0x800706BE),错误来自打开文件按钮 // 打开文件 xlWorkBook = xlexcel.Workbooks.Open(file, 0, true, 5, "", "", true, Microsoft.Office.Interop .Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
猜你喜欢
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
相关资源
最近更新 更多