2010-02-04 32 views
8

Verilerim, ASP.NET sayfamdaki Varlık Veri modeli tablosundan geliyor. Şimdi bu verileri butona tıkladığınızda Excel'e aktarmalıyım.Verinin LINQ ile Varlığa Nasıl Aktarılır?

var model = from i in myEntity.Inquiries 
      where i.User_Id == 5 
         orderby i.TX_Id descending 
         select new { 
          RequestID = i.TX_Id, 
          CustomerName = i.CustomerMaster.FirstName, 
          RequestDate = i.RequestDate, 
          Email = i.CustomerMaster.MS_Id, 
          DocDescription = i.Document.Description, 
          ProductName = i.Product.Name 
+0

http://www.hanselman.com/blog/BackToBasicsKeepItSimpleAndDevelopYourSenseOfSmellFromLinqToCSV.aspx –

cevap

1

Sadece bir dize temsilini yazabilirsiniz: Burada

http://csharp.net-informations.com/excel/csharp-excel-oledb-insert.htm sorular tablodan veri okumak için benim işlevi şudur: OLEDB kullanıyorsa burada olduğu gibi

, bu yalındır Verileriniz - her alan için ayrılmış sınır ve her satır için ayrılmış \ r \ n. Ardından, tarayıcıyı otomatik olarak Excel'de açılacak bir .csv dosyası olarak akıtın. Sen SpreadsheetML kullanarak düşünebilirsiniz

+0

Çözümü buldum. Hadi bakalım. http://stackoverflow.com/questions/1932568/exporting-a-html-table-to-excel – Rita

+0

Ayrıca buradan bir göz atabilirsiniz: http://stackoverflow.com/questions/151005/create-excel-xls -ve-xlsx dosya-den-c / –

0

temelde çift xml dosyası tıklayarak üzerinde excel uygulamasını başlatmak için xml dosyasının en üstünde belirtilen bir Koza süreci ile bir XML dosyası olan. Aşağıda verilen SpreadSheetML için örnek. Bu yardımcı olur

<?xml version="1.0"?> 
<?mso-application progid="Excel.Sheet"?> 
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:ms="urn:schemas-microsoft-com:xslt"> 
    <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> 
     <Author xmlns="urn:schemas-microsoft-com:office:spreadsheet">Author<"/Author> 
     <LastAuthor xmlns="urn:schemas-microsoft-com:office:spreadsheet">Author<"/LastAuthor> 
     <Created xmlns="urn:schemas-microsoft-com:office:spreadsheet"/> 
     <LastSaved xmlns="urn:schemas-microsoft-com:office:spreadsheet"/> 
     <Company xmlns="urn:schemas-microsoft-com:office:spreadsheet">Author<"/Company> 
     <Version xmlns="urn:schemas-microsoft-com:office:spreadsheet">11.8132<"/Version> 
    </DocumentProperties> 
    <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> 
     <WindowHeight xmlns="urn:schemas-microsoft-com:office:spreadsheet">12660<"/WindowHeight> 
     <WindowWidth xmlns="urn:schemas-microsoft-com:office:spreadsheet">19020<"/WindowWidth> 
     <WindowTopX xmlns="urn:schemas-microsoft-com:office:spreadsheet">120<"/WindowTopX> 
     <WindowTopY xmlns="urn:schemas-microsoft-com:office:spreadsheet">105<"/WindowTopY> 
     <ProtectStructure xmlns="urn:schemas-microsoft-com:office:spreadsheet">False<"/ProtectStructure> 
     <ProtectWindows xmlns="urn:schemas-microsoft-com:office:spreadsheet">False<"/ProtectWindows> 
    </ExcelWorkbook> 
    <Styles> 
     <Style ss:ID="s21"> 
      <NumberFormat ss:Format="Percent"/> 
     </Style> 
     <Style ss:ID="s22"> 
      <NumberFormat ss:Format="[ENG][$-409]d\-mmm\-yyyy;@"/> 
     </Style> 
     <Style ss:ID="s23"> 
      <NumberFormat ss:Format="mm/dd/yyyy;@"/> 
     </Style> 
     <Style ss:ID="s24"> 
      <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/> 
      <Font x:Family="Swiss" ss:Bold="1"/> 
     </Style> 
     <Style ss:ID="Default" ss:Name="Normal"> 
      <Alignment ss:Vertical="Bottom"/> 
      <Borders/> 
      <Font/> 
      <Interior/> 
      <NumberFormat/> 
      <Protection/> 
     </Style> 
    </Styles> 
    <Worksheet ss:Name="SomeSheetName"> 
     <Table ss:ExpandedColumnCount="33" ss:ExpandedRowCount="5768" x:FullColumns="1" x:FullRows="1"> 
      <Column ss:Width="111"/> 
       <Row> 
        <Cell ss:StyleID="s24"> 
         <Data ss:Type="String">ABCD<"/Data> 
        </Cell> 
        <Cell ss:StyleID="s24"> 
         <Data ss:Type="String">ABCD<"/Data> 
        </Cell> 
        <Cell ss:StyleID="s24"> 
         <Data ss:Type="String">ABCD<"/Data> 
        </Cell> 
        <Cell ss:StyleID="s24"> 
         <Data ss:Type="String">ABCD<"/Data> 
        </Cell> 
        <Cell ss:StyleID="s24"> 
         <Data ss:Type="String">ABCD<"/Data> 
        </Cell> 
       </Row> 
      </Column> 
     </Table> 
     <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> 
      <Selected/> 
      <ProtectObjects>False<"/ProtectObjects> 
      <ProtectScenarios>False<"/ProtectScenarios> 
     </WorksheetOptions> 
    </Worksheet> 
</Workbook> 

Umut.

0

önce de belirtildiği gibi, excel veri vermek için en kolay yolu metin veya xml sunum üretmektir. Benim için, dosya üretimi için SpreadSheetML ve T4 metin şablonlarını kullanmayı tercih ederim. Örnek T4 dosyasına bir göz atabilirsiniz: http://lilium.codeplex.com/SourceControl/changeset/view/40985#803959.

Eğer T4 MS Visual Studio parçası olan lütfen unutmayın T4 kullanmaya karar ve ayrı olarak dağıtmak OLMAYABİLİR edin. Sorun, Visual Studio Express Edition'ı hedef makineye yükleyerek çözülebilir.

Alternatif yapı-aspx şablon motoru, aspx görünümü sınıfları üretiminde kullanılan kullanabilir. Burada nasıl yapıldığına bir bakın [oops, daha fazla hiperlink göndermeme izin vermiyor, eğer hala ilgilenirseniz, bana bildirin] (bu gerçek bir dünya uygulaması bu yüzden oldukça büyük ve kirli bir kod olduğunu unutmayın). Aspx motoru, Style etiketini kendi biçiminde ele alır, bu nedenle çalışması için nitelikli ad kullanmanız gerekir, Visual Studio'da otomatik biçimlendirme de düzgün çalışmayacaktır.

3

Hala bağlantılı makalede tanımlanan aynı tekniği kullanarak Excel içine ekleyebilirsiniz.

Sadece aşağıdaki psuedo kodu

try 
{ 
    System.Data.OleDb.OleDbConnection MyConnection ; 
    System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand(); 
    string sql = null; 
    MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\csharp.net-informations.xls';Extended Properties=Excel 8.0;"); 
    MyConnection.Open(); 
    myCommand.Connection = MyConnection; 

    myCommand.CommandText = "Insert into [Sheet1$] (id,name) values('@p1', '@p2')"; 
    myCommand.Parameters.Add("@p1", OleDbType.VarChar, 100); 
    myCommand.Parameters.Add("@p2", OleDbType.VarChar, 100); 

    // define query to entity data model 
    var model = from i in myEntity.Inquiries select i; 

    foreach(var m in model) 
    {  
     cmd.Parameters["@p1"].Value = m.RequestID; 
     cmd.Parameters["@p2"].Value = m.CustomerName; 
     // .. Add other parameters here 
     cmd.ExecuteNonQuery(); 
    } 
    } 
1

Özelliklerin listesini almak için yansımayı kullanabilir, ardından sorgunuzun sonucunu eski bir ADO.Net DataTable'a eklemek için bu özellik listesini (ve yansımayı) kullanabilirsiniz. DataTable, geçici bir XML dosyasını geçici klasörde (System.IO kullanarak) saklamak için kullanılabilecek WriteXML'e sahiptir. Daha sonra Excel uygulamasında OpenXML kullanın. Bu yaklaşımı denemek isterseniz

Ben http://social.msdn.microsoft.com/Forums/en-US/whatforum/thread/69869649-a238-4af9-8059-55499b50dd57 kod örnekleri var.IMO bu gibi görünüyor (en azından, çok daha çabuk Excel'e doğrudan yazmaya çalışıyorum sonra) en hızlı, en kolay (en azından, çok daha kolay kendi bazı XML biçimine Sorgunuzla dönüştürmeye çalışırken sonra) ve en yeniden kullanılabilir bir yöntem (artı kod örneğinde geç bağlayıcı, o yüzden en azından Excel 2003 varsayarak karma çevreye karşı gelişebilir).

İlgili konular