복붙노트

[SQL] Excel로 내보내기 SQL 쿼리 데이터

SQL

Excel로 내보내기 SQL 쿼리 데이터

나는 매우 큰 데이터 세트를 반환하는 쿼리가 있습니다. 나는 복사 내가 일반적으로 할 Excel로 붙여 넣을 수 없습니다. 나는 엑셀 시트에 직접 수출하는 방법에 대한 몇 가지 연구를하고있다. 나는 코드의 작은 조각이 함께 재현 한 마이크로 소프트 서버 2003 I는 Microsoft.Jet.OLEDB.4.0 데이터 공급자를 사용하는 것을 시도하고있다 및 Excel 2007을 실행하는 서버에 SQL Server 2008을 실행하고 것과 같은 외모 I '이 예에서 봤어요.

INSERT INTO OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\Working\Book1.xlsx;Extended Properties=EXCEL 12.0;HDR=YES')
SELECT productid, price FROM dbo.product

그러나 이것은 내가라는 오류 메시지가 점점 오전, 작동하지 않는 경우

사람이 가능성이 더 나은 방법을이 작업을 수행하거나하는 방법에 대한 아이디어가 있습니까?

해결법

  1. ==============================

    1.이것이 당신이 찾고있는 무엇인지는 모르겠지만,이 같은 Excel로 결과를 내보낼 수 있습니다 :

    이것이 당신이 찾고있는 무엇인지는 모르겠지만,이 같은 Excel로 결과를 내보낼 수 있습니다 :

    결과 창에서 모든 레코드를 강조하기 위해 왼쪽 위 셀을 클릭 한 다음 왼쪽 상단 셀을 마우스 오른쪽 버튼으로 클릭하고 "저장으로 결과"를 클릭합니다. 내보내기 옵션 중 하나는 CSV입니다.

    당신은 이것을 샷을 너무 줄 수도 있습니다 :

    INSERT INTO OPENROWSET 
       ('Microsoft.Jet.OLEDB.4.0', 
       'Excel 8.0;Database=c:\Test.xls;','SELECT productid, price FROM dbo.product')
    

    마지막으로, 데이터 수출 SSIS (교체 DTS)를 사용하여 조사 할 수 있습니다. 여기에 튜토리얼에 대한 링크는 다음과 같습니다

    http://www.accelebrate.com/sql_training/ssis_2008_tutorial.htm

    == 업데이트 # 1 ==

    열 헤더를 CSV 파일로 결과를 저장하려면, 하나는 아래의 단계를 수행 할 수 있습니다 :

  2. ==============================

    2.그냥 엑셀로 내보낼 필요가있는 경우, 당신은 데이터 내보내기 마법사를 사용할 수 있습니다. 마우스 오른쪽 단추로 데이터베이스, 작업 -> 데이터 내보내기를 클릭합니다.

    그냥 엑셀로 내보낼 필요가있는 경우, 당신은 데이터 내보내기 마법사를 사용할 수 있습니다. 마우스 오른쪽 단추로 데이터베이스, 작업 -> 데이터 내보내기를 클릭합니다.

  3. ==============================

    3.나는 비슷한 문제를 가지고 있지만 트위스트 - 결과 집합이 하나 개의 쿼리에서 때 위에 나열된 솔루션은 작동하지만 내 상황에서, 나는 결과를 Excel로 내보낼 필요가있는 다수의 개별 선택 쿼리를했다. 아래는 내가 절에 이름을 할 수 있지만 설명하기 단지 예입니다 ...

    나는 비슷한 문제를 가지고 있지만 트위스트 - 결과 집합이 하나 개의 쿼리에서 때 위에 나열된 솔루션은 작동하지만 내 상황에서, 나는 결과를 Excel로 내보낼 필요가있는 다수의 개별 선택 쿼리를했다. 아래는 내가 절에 이름을 할 수 있지만 설명하기 단지 예입니다 ...

    select a,b from Table_A where name = 'x'
    select a,b from Table_A where name = 'y'
    select a,b from Table_A where name = 'z'
    

    마법사 나이 경우 다른 쿼리의 모든 결과를 엑셀로 하나 개의 쿼리에서 결과를 내보낼 수 있지만시키는했다.

    내가 연구 할 때, 우리가 그리드에 결과를 해제하고 텍스트로 결과를 가능하게 할 수 있음을 발견했다. 그래서, Ctrl 키 + T는, 모든 문을 실행합니다. 이 출력 창에 텍스트 파일로 결과를 표시해야합니다. 당신은 당신이 Excel로 가져 오기위한 탭에 텍스트 형식을 구분 조작 할 수 있습니다.

    또한 Ctrl 키 + 시프트 + F는 결과를 파일로 내보낼 수 있습니다 - 그것은 텍스트 편집기를 사용하여 열 및 엑셀 가져 오기 조작 할 수있는 .RPT 파일로 내 보냅니다.

    이 어떤 다른 사람이 유사한 문제를 가진 도움이되기를 바랍니다.

  4. ==============================

    4.누군가가 C #에서이 작업을 수행하는 방법을 찾고 여기에오고, 나는 DOTNET 핵심 2.0.3 엔티티 프레임 워크의 핵심 2.0.3에서 다음과 같은 방법이 있었다 성공을 시도했다

    누군가가 C #에서이 작업을 수행하는 방법을 찾고 여기에오고, 나는 DOTNET 핵심 2.0.3 엔티티 프레임 워크의 핵심 2.0.3에서 다음과 같은 방법이 있었다 성공을 시도했다

    먼저 모델 클래스를 만들 수 있습니다.

    public class User
    {  
        public string Name { get; set; }  
        public int Address { get; set; }  
        public int ZIP { get; set; }  
        public string Gender { get; set; }  
    } 
    

    그런 다음 EPPlus Nuget 패키지를 설치합니다. (아마뿐만 아니라 다른 버전 작동 버전 4.0.5을 사용했다.)

    Install-Package EPPlus -Version 4.0.5
    

    엑셀 행에 데이터 집합을 변환하는 로직을 포함 ExcelExportHelper 클래스를 만들 수 있습니다. 이 클래스는 모델 클래스 또는 데이터 세트와 의존성이 없습니다.

    public class ExcelExportHelper
        {
            public static string ExcelContentType
            {
                get
                { return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; }
            }
    
            public static DataTable ListToDataTable<T>(List<T> data)
            {
                PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
                DataTable dataTable = new DataTable();
    
                for (int i = 0; i < properties.Count; i++)
                {
                    PropertyDescriptor property = properties[i];
                    dataTable.Columns.Add(property.Name, Nullable.GetUnderlyingType(property.PropertyType) ?? property.PropertyType);
                }
    
                object[] values = new object[properties.Count];
                foreach (T item in data)
                {
                    for (int i = 0; i < values.Length; i++)
                    {
                        values[i] = properties[i].GetValue(item);
                    }
    
                    dataTable.Rows.Add(values);
                }
                return dataTable;
            }
    
            public static byte[] ExportExcel(DataTable dataTable, string heading = "", bool showSrNo = false, params string[] columnsToTake)
            {
    
                byte[] result = null;
                using (ExcelPackage package = new ExcelPackage())
                {
                    ExcelWorksheet workSheet = package.Workbook.Worksheets.Add(String.Format("{0} Data", heading));
                    int startRowFrom = String.IsNullOrEmpty(heading) ? 1 : 3;
    
                    if (showSrNo)
                    {
                        DataColumn dataColumn = dataTable.Columns.Add("#", typeof(int));
                        dataColumn.SetOrdinal(0);
                        int index = 1;
                        foreach (DataRow item in dataTable.Rows)
                        {
                            item[0] = index;
                            index++;
                        }
                    }
    
    
                    // add the content into the Excel file  
                    workSheet.Cells["A" + startRowFrom].LoadFromDataTable(dataTable, true);
    
                    // autofit width of cells with small content  
                    int columnIndex = 1;
                    foreach (DataColumn column in dataTable.Columns)
                    {
                        int maxLength;
                        ExcelRange columnCells = workSheet.Cells[workSheet.Dimension.Start.Row, columnIndex, workSheet.Dimension.End.Row, columnIndex];
                        try
                        {
                            maxLength = columnCells.Max(cell => cell.Value.ToString().Count());
                        }
                        catch (Exception) //nishanc
                        {
                            maxLength = columnCells.Max(cell => (cell.Value +"").ToString().Length);
                        }
    
                        //workSheet.Column(columnIndex).AutoFit();
                        if (maxLength < 150)
                        {
                            //workSheet.Column(columnIndex).AutoFit();
                        }
    
    
                        columnIndex++;
                    }
    
                    // format header - bold, yellow on black  
                    using (ExcelRange r = workSheet.Cells[startRowFrom, 1, startRowFrom, dataTable.Columns.Count])
                    {
                        r.Style.Font.Color.SetColor(System.Drawing.Color.White);
                        r.Style.Font.Bold = true;
                        r.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
                        r.Style.Fill.BackgroundColor.SetColor(Color.Brown);
                    }
    
                    // format cells - add borders  
                    using (ExcelRange r = workSheet.Cells[startRowFrom + 1, 1, startRowFrom + dataTable.Rows.Count, dataTable.Columns.Count])
                    {
                        r.Style.Border.Top.Style = ExcelBorderStyle.Thin;
                        r.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
                        r.Style.Border.Left.Style = ExcelBorderStyle.Thin;
                        r.Style.Border.Right.Style = ExcelBorderStyle.Thin;
    
                        r.Style.Border.Top.Color.SetColor(System.Drawing.Color.Black);
                        r.Style.Border.Bottom.Color.SetColor(System.Drawing.Color.Black);
                        r.Style.Border.Left.Color.SetColor(System.Drawing.Color.Black);
                        r.Style.Border.Right.Color.SetColor(System.Drawing.Color.Black);
                    }
    
                    // removed ignored columns  
                    for (int i = dataTable.Columns.Count - 1; i >= 0; i--)
                    {
                        if (i == 0 && showSrNo)
                        {
                            continue;
                        }
                        if (!columnsToTake.Contains(dataTable.Columns[i].ColumnName))
                        {
                            workSheet.DeleteColumn(i + 1);
                        }
                    }
    
                    if (!String.IsNullOrEmpty(heading))
                    {
                        workSheet.Cells["A1"].Value = heading;
                       // workSheet.Cells["A1"].Style.Font.Size = 20;
    
                        workSheet.InsertColumn(1, 1);
                        workSheet.InsertRow(1, 1);
                        workSheet.Column(1).Width = 10;
                    }
    
                    result = package.GetAsByteArray();
                }
    
                return result;
            }
    
            public static byte[] ExportExcel<T>(List<T> data, string Heading = "", bool showSlno = false, params string[] ColumnsToTake)
            {
                return ExportExcel(ListToDataTable<T>(data), Heading, showSlno, ColumnsToTake);
            }
        }
    

    이제 아마도 컨트롤러의 방법을 위해, 당신은 엑셀 파일을 생성하려면이 방법을 추가 할 수 있습니다. 당신은 당신의 저장 프로 시저에 대한 매개 변수를 전달할 수 있습니다. 메서드의 반환 형식이 FileContentResult 있음을 유의하십시오. 무엇이든 중요한 것은 당신이 목록에서 결과를해야합니다, 당신은 실행 쿼리합니다.

    [HttpPost]
    public async Task<FileContentResult> Create([Bind("Id,StartDate,EndDate")] GetReport getReport)
    {
        DateTime startDate = getReport.StartDate;
        DateTime endDate = getReport.EndDate;
    
        // call the stored procedure and store dataset in a List.
        List<User> users = _context.Reports.FromSql("exec dbo.SP_GetEmpReport @start={0}, @end={1}", startDate, endDate).ToList();
        //set custome column names
        string[] columns = { "Name", "Address", "ZIP", "Gender"};
        byte[] filecontent = ExcelExportHelper.ExportExcel(users, "Users", true, columns);
        // set file name.
        return File(filecontent, ExcelExportHelper.ExcelContentType, "Report.xlsx"); 
    }
    

    자세한 내용은 여기에서 찾을 수 있습니다

  5. ==============================

    5.난 당신이 Excel로 복사 붙여 넣기하여 매우 큰 데이터 세트를 방지하기 위해 Excel로 수출 SQL 데이터에 노력하고 있음을 참조하십시오.

    난 당신이 Excel로 복사 붙여 넣기하여 매우 큰 데이터 세트를 방지하기 위해 Excel로 수출 SQL 데이터에 노력하고 있음을 참조하십시오.

    (: MySQL은, 마이크로 소프트 SQL 서버, PostgreSQL을 어떤 SQL 데이터베이스와 함께) 자동으로 수출을 Excel로 SQL 데이터를 내보낼하고 업데이트하는 방법을 학습에 관심이있을 수 있습니다.

  6. from https://stackoverflow.com/questions/7389637/export-sql-query-data-to-excel by cc-by-sa and MIT license