2013-04-05 57 views
9

我正在C#中的excel工作表上工作,我很惊讶只选择excel工作表。 我尝试下面的代码只在c#中过滤excel文件

OpenFileDialog browseFile = new OpenFileDialog(); 
browseFile.DereferenceLinks = true; 
browseFile.Filter = "Excel|*.xls|Excel 2010|*.xlsx"; 
// browseFile.Filter = "Link Files (*.lnk)|*.lnk"; 

browseFile.Title = "Browse Excel file"; 
if (browseFile.ShowDialog() == DialogResult.Cancel) 

使用此代码我不仅得到Excel表格也最终得到的快捷方式文件。 任何人都可以提出如何限制快捷方式文件。

+3

计数器从SO 示例http://stackoverflow.com/questions/2350802/can-the-net-openfiledialog-be-setup-to-allow-the-user-to-select- a-lnk-file – 2013-04-05 03:15:53

+0

您也可以尝试组合过滤器:'Excel文件| * .xls,*。xlsx' – 2013-04-05 03:21:09

+0

@BlackMaggie我希望链接文件受到限制。不允许他们。 – 2013-04-05 03:29:26

回答

7

请看下面的方法是否正常。
在此期间,让我试试如果有可能使用反射的东西。

OpenFileDialog openKeywordsFileDialog = new OpenFileDialog(); 
    openKeywordsFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
    openKeywordsFileDialog.Multiselect = false; 
    openKeywordsFileDialog.ValidateNames = true; 
    openKeywordsFileDialog.DereferenceLinks = false; // Will return .lnk in shortcuts. 
    openKeywordsFileDialog.Filter = "Excel |*.xlsx"; 
    openKeywordsFileDialog.FileOk += new System.ComponentModel.CancelEventHandler(OpenKeywordsFileDialog_FileOk); 
    var dialogResult = openKeywordsFileDialog.ShowDialog(); 


void OpenKeywordsFileDialog_FileOk(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
     OpenFileDialog fileDialog = sender as OpenFileDialog; 
     string selectedFile = fileDialog.FileName; 
     if (string.IsNullOrEmpty(selectedFile) || selectedFile.Contains(".lnk")) 
     { 
      MessageBox.Show("Please select a valid Excel File"); 
      e.Cancel = true; 
     } 
     return; 
} 
+0

你也可以考虑直接调用Win32 API http://msdn.microsoft.com/en-us/library/windows/desktop/ms646927(v=vs.85).aspx – 2013-04-05 04:45:11

+0

如何使用这个OpenKeywordsFileDialog_FileOk()?它是一种方法还是一种系统生成的事件。 – 2013-04-05 05:00:20

+0

很抱歉忘了为'FileOk'事件添加处理程序。 现在编辑了答案。 – 2013-04-05 05:13:47

3

试着用这个。希望这个帮助!干杯! :D

browseFile.Filter =“Excel files(* .xls or .xlsx)| .xls; *。xlsx”;

+0

即使这不起作用。这最终只显示捷径。我只想要没有舒马赫的excel。 – 2013-04-05 03:39:09

+0

谢谢 - 我需要知道使用分号来分隔扩展名(即.xlsx中的.xls)。 – Buck 2014-01-01 01:49:52