[SQL] Excel로 내보내기 SQL 쿼리 데이터
SQLExcel로 내보내기 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.이것이 당신이 찾고있는 무엇인지는 모르겠지만,이 같은 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.그냥 엑셀로 내보낼 필요가있는 경우, 당신은 데이터 내보내기 마법사를 사용할 수 있습니다. 마우스 오른쪽 단추로 데이터베이스, 작업 -> 데이터 내보내기를 클릭합니다.
그냥 엑셀로 내보낼 필요가있는 경우, 당신은 데이터 내보내기 마법사를 사용할 수 있습니다. 마우스 오른쪽 단추로 데이터베이스, 작업 -> 데이터 내보내기를 클릭합니다.
-
==============================
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.누군가가 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.난 당신이 Excel로 복사 붙여 넣기하여 매우 큰 데이터 세트를 방지하기 위해 Excel로 수출 SQL 데이터에 노력하고 있음을 참조하십시오.
난 당신이 Excel로 복사 붙여 넣기하여 매우 큰 데이터 세트를 방지하기 위해 Excel로 수출 SQL 데이터에 노력하고 있음을 참조하십시오.
(: MySQL은, 마이크로 소프트 SQL 서버, PostgreSQL을 어떤 SQL 데이터베이스와 함께) 자동으로 수출을 Excel로 SQL 데이터를 내보낼하고 업데이트하는 방법을 학습에 관심이있을 수 있습니다.

from https://stackoverflow.com/questions/7389637/export-sql-query-data-to-excel by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 계산은 PostgreSQL의 2 날짜 사이의 근무 시간 (0) | 2020.04.07 |
---|---|
[SQL] 그 콤바인 두 배열의 PostgreSQL에 우편 () 함수와 같은 뭔가인가? (0) | 2020.04.07 |
[SQL] OPENROWSET 쿼리에서 변수 사용 (0) | 2020.04.07 |
[SQL] GROUP BY + CASE 문 (0) | 2020.04.07 |
[SQL] 에는 mysql - 인용 번호 나하지? (0) | 2020.04.07 |