2010-02-04 2 views
8

는 내 ASP.NET 페이지에 엔터티 데이터 모델 테이블에서 오는 데이터를 가지고있다. 이제이 데이터를 버튼 클릭시 Excel로 내 보내야합니다.LINQ to Entity를 사용하여 Excel로 데이터를 내보내는 방법?

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 –

답변

1

당신은 단지의 캐릭터 라인 표현을 쓸 수 있습니다 : 여기

http://csharp.net-informations.com/excel/csharp-excel-oledb-insert.htm가 조회 테이블에서 데이터를 읽어 내 기능입니다 : 그것은 OLEDB를 사용하는 경우는 여기로

, 그것은 정직 각 필드에 대해 구분 된 데이터 탭 및 각 행에 대해 구분 된 \ r \ n 그런 다음 브라우저에서 .csv 파일로 스트리밍하면 Excel에서 자동으로 열립니다. 당신은 SPREADSHEETML를 사용하여 고려할 수

+0

해결책을 찾았습니다. 여기 있습니다. http://stackoverflow.com/questions/1932568/exporting-a-html-table-to-excel – Rita

+0

다음 페이지에서 살펴볼 수도 있습니다. http://stackoverflow.com/questions/151005/create-excel-xls -and-xlsx-file-from-c / –

0

는 기본적으로 더블 xml 파일을 클릭에 엑셀 응용 프로그램을 실행하기 위해 XML 파일의 상단에 언급 누에 고치 과정과 XML 파일이다. 아래에 제공된 SpreadSheetML 예제.

<?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> 

희망이 있습니다.

0

앞서 언급했듯이 데이터를 내보내는 가장 쉬운 방법은 텍스트 또는 xml 프레젠테이션을 생성하는 것입니다. 필자는 파일 생성을 위해 SpreadSheetML 및 T4 텍스트 템플릿 엔진을 사용하는 것을 선호합니다. 여기에 샘플 T4 파일을보실 수 있습니다 : http://lilium.codeplex.com/SourceControl/changeset/view/40985#803959.

당신이 T4는 MS 비주얼 스튜디오의 일부입니다 명심하시기 바랍니다 T4를 사용하기로 결정하고 별도로 배포 할 수 없습니다합니다. 대상 컴퓨터에 Visual Studio Express Edition을 설치하면이 문제를 해결할 수 있습니다.

또는 당신은 빌드 - 영문 템플릿 엔진, 영문 뷰 클래스 생성에 사용을 사용할 수 있습니다. 여기가 어떻게 끝났는지보세요. ​​(여전히 관심이 있다면 더 많은 하이퍼 링크를 게시하는 것을 허용하지 않습니다.) (실제 응용 프로그램이므로 매우 크고 더러운 코드입니다). Aspx 엔진은 Style 태그를 자체 방식으로 처리하므로 정규화 된 이름을 사용하여 작동하도록해야하므로 Visual Studio 내에서 자동 서식이 제대로 작동하지 않습니다.

3

당신은 여전히 ​​링크 된 문서에서 확인 된 것과 동일한 기술을 사용하여 Excel 스프레드 시트에 삽입 할 수 있습니다.

그냥 다음과 같은 사이비 코드

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

리플렉션을 사용하여 속성 목록을 얻은 다음 해당 속성 목록 (및 리플렉션)을 사용하여 쿼리 결과를 이전 ADO.Net DataTable에 연결할 수 있습니다. DataTable에는 임시 XML 파일을 임시 폴더에 저장하는 데 사용할 수있는 WriteXML이 있습니다 (System.IO 사용). 그런 다음 Excel 응용 프로그램에서 OpenXML을 사용하기 만하면됩니다.

이 방법을 시도하려면 http://social.msdn.microsoft.com/Forums/en-US/whatforum/thread/69869649-a238-4af9-8059-55499b50dd57에 코드 샘플이 있습니다.IMO는 가장 빠르고 (적어도 Excel에 직접 쓰려고하는 것이 훨씬 빠름) 가장 쉽고 (최소한 간단하게 XML 형식으로 쿼리를 변환하는 것이 훨씬 쉽습니다), 가장 재사용 가능한 방법 인 것 같습니다. (코드 샘플에서 우리는 후기 바인딩이므로 Excel 2003 이상을 가정 한 혼합 환경에 맞춰 개발할 수 있습니다).

관련 문제