2013-04-05 4 views
9

Ich arbeite auf Excel-Blättern in C# und ich bin geschlagen, nur Excel-Blätter auszuwählen. Ich habe versucht, den folgenden CodeFilterung nur Excel-Dateien in C#

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) 

diesen Code verwenden nur bin nicht Blätter bekommen Excel, sondern auch die Verknüpfungsdateien am Ende immer. Kann jemand vorschlagen, wie ich die Abkürzungsdateien auch beschränken kann.

+3

Gegenbeispiel aus SO http://stackoverflow.com/questions/2350802/can-the-net-openfiledialog-be-setup-to-allow-the-user-to-select- a-lnk-Datei –

+0

Sie könnten auch versuchen, den Filter zu kombinieren: 'Excel-Dateien | * .xls, * .xlsx' –

+0

@BlackMaggie Ich möchte die Link-Dateien eingeschränkt werden. sie nicht zuzulassen. –

Antwort

7

Bitte sehen Sie, ob Sie mit dem folgenden Ansatz einverstanden sind.
In der Zwischenzeit lassen Sie mich versuchen, wenn etwas durch Reflexionen möglich ist.

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

Sie können auch in Erwägung ziehen, die Win32-API direkt aufzurufen http://msdn.microsoft.com/en-us/library/windows/desktop/ms646927(v=vs.85).aspx –

+0

Wie wird OpenKeywordsFileDialog_FileOk() verwendet? Ist es eine Methode oder ein systemgeneriertes Ereignis? –

+0

Wir haben vergessen, den Handler für das 'FileOk'-Ereignis hinzuzufügen. Habe die Antwort jetzt bearbeitet. –

3

Versuchen Sie, dies zu verwenden. Ich hoffe das hilft! Prost! : D

browseFile.Filter = "Excel-Dateien (* .xls oder .xlsx) | .xls; *. Xlsx";

+0

Auch dies funktioniert nicht. Dies zeigt nur Shortcuts.Ich möchte nur ohne shorcuts Excel. –

+0

Danke - Ich musste wissen, das Semikolon zum Trennen der Erweiterungen zu verwenden (d. H. .xls von .xlsx). – Buck