2013-04-05 14 views
9

C# 'da excel sayfaları üzerinde çalışıyorum ve sadece excel sayfaları seçmek için vuruldum. Sadece excel sayfaları almıyorum bu kodu kullanarak aşağıdaki koduSadece excel dosyaları filtreleme 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) 

çalıştı ama aynı zamanda kısayol dosyalarını alma sona erdi. Herkes, kısayol dosyalarını da nasıl kısıtlayabileceğimi önerebilir.

+3

Karşı Örnek http://stackoverflow.com/questions/2350802/can-the-net-openfiledialog-be-setup-to-allow-the-user-to-select- a-lnk-file –

+0

Ayrıca, aşağıdakileri de birleştirebilirsiniz: Excel Dosyaları | * .xls, *. xlsx' –

+0

@ BlackMaggie Bağlantı dosyalarının kısıtlanmasını istiyorum. onlara izin vermemek. –

cevap

7

Lütfen aşağıdaki yaklaşımın iyi olup olmadığını kontrol edin.
Bu arada, yansımalar kullanarak bir şey yapmanın mümkün olup olmadığını deneyeyim.

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; 
} 
SO den
+0

Ayrıca, Win32 API'sini doğrudan http://msdn.microsoft.com/en-us/library/windows/desktop/ms646927(v=vs.85).aspx –

+0

arayarak düşünebilirsiniz. Bu OpenKeywordsFileDialog_FileOk() nasıl kullanılır? Bir yöntem veya sistem tarafından oluşturulan bir olay mı. –

+0

Üzgünüz, 'FileOk' olayı için işleyici eklemeyi unuttum. Şimdi cevabı düzenlediniz. –

3

Bunu kullanmayı deneyin. Umarım bu yardım! Şerefe! : D

browseFile.Filter = "Excel dosyaları (* .xls veya .xlsx) | .xls; *. Xlsx";

+0

Bu bile çalışmıyor. Bu sadece kısayollar göstererek bitiyor. Kısıtlama olmadan sadece excel istiyorum. –

+0

Teşekkürler - Uzantıları ayırmak için noktalı virgülü kullanmayı bilmem gerekiyordu (ör. .xls .xlsx). – Buck

İlgili konular