-1

我想从同一个目录中读取 2 个 excel 文件并将它们的完整路径存储在两个不同的变量中。

例如,

C:\\Users\\User\\Desktop\\Folder\\File1.xlsx - First value
C:\\Users\\User\\Desktop\\Folder\\File2.xlsx - Second value

string为此准备了一个数组,但它不起作用。

请帮忙。

我做了以下事情:

string[] location = new string[2];
int i = 0;

OpenFileDialog openFileDialog1 = new OpenFileDialog();
this.openFileDialog1.Filter = "Excel|*.xlsx;*.xlxm;*.xls | All files (*.*)|*.*";
this.openFileDialog1.Multiselect = true;
this.openFileDialog1.Title = "Select Excel Files";

DialogResult dr = this.openFileDialog1.ShowDialog();
if (dr == System.Windows.Forms.DialogResult.OK)
{
    foreach (String file in openFileDialog1.FileNames)
    {
        location[i] = Path.GetDirectoryName(file);
        i++;
    }
}
4

2 回答 2

1

我唯一能看到你的代码有问题的是你正在创建一个本地实例,OpenFileDialog然后尝试引用它,就好像它是一个类成员字段一样。

OpenFileDialog openFileDialog1 = new OpenFileDialog();
this.openFileDialog1.Filter = "Excel|*.xlsx;*.xlxm;*.xls | All files (*.*)|*.*";

摆脱this.

于 2019-04-09T12:16:03.360 回答
0

如果用户确实选择了多个文件,您的代码很有可能崩溃。我认为没有理由将“位置”的数组大小直接设置为两个。我建议您查看 Alex K 的评论。对话框的 .FileNames 属性已经是一个数组。然后获取目录对所有人都是一样的(就像 Crowcoder 写的那样)。

我想,你最后需要的是:

        OpenFileDialog openFileDialog1 = new OpenFileDialog();
        openFileDialog1.Filter = "Excel|*.xlsx;*.xlxm;*.xls | All files (*.*)|*.*";
        openFileDialog1.Multiselect = true;
        openFileDialog1.Title = "Select Excel Files";

        DialogResult dr = openFileDialog1.ShowDialog();
        if (dr == System.Windows.Forms.DialogResult.OK)
        {
             string[] location = openFileDialog1.FileNames;
             // do something
        }

如果以防万一,您需要该目录,请执行以下操作:

 string[] location = openFileDialog1.FileNames.Select(x => Path.GetDirectoryName(x)).ToArray()
于 2019-04-09T12:44:32.097 回答