내가 여기에 3 테이블을 Excel로 내보내는 중 첫 번째 테이블에 조인 싶습니다. Transpose 함수를 사용하여 시도했지만 잘못된 방식으로 System.ArgumentException throw합니다 것처럼 그것을 보인다. . 확실하지, 테이블을 바꾸어 할 수있는 다른 방법이 무엇Datatable은 전치 할 수 없습니다. "System.ArgumentException '
나는 또한 작동하지 않았더라도 DataView를하지만를 사용하여 시도 아래는 내가 DataView를했던 것입니다 :.. 아래
static void Main(string[] args)
{
string strSql = ConfigurationManager.AppSettings["Sql"];
DataAccess dsObj = new DataAccess();
DataSet ds= dsObj.GetData(strSql);
DataView transposedDataView = Transpose(ds.Tables[0].Copy()).DefaultView;
var td = transposedDataView.ToTable();
TableData(td, ds.Tables[1], ds.Tables[2]);
}
은 전체 코드
입니다class CreateWorkbook
{
static void Main(string[] args)
{
string strSql = ConfigurationManager.AppSettings["Sql"];
DataAccess dsObj = new DataAccess();
DataSet ds= dsObj.GetData(strSql);
TableData(Transpose(ds.Tables[0]), ds.Tables[1], ds.Tables[2]);
}
private static DataTable Transpose(DataTable dt)
{
DataTable dtNew = new DataTable();
//adding columns
for (int i = 0; i <= dt.Rows.Count; i++)
{
dtNew.Columns.Add(i.ToString());
}
//Changing Column Captions:
dtNew.Columns[0].ColumnName = " ";
//Adding Row Data
for (int k = 1; k < dt.Columns.Count; k++)
{
DataRow r = dtNew.NewRow();
r[0] = dt.Columns[k].ToString();
for (int j = 1; j <= dt.Rows.Count; j++)
r[j] = dt.Rows[j - 1][k];
dtNew.Rows.Add(r);
}
return dtNew;
}
private static void TableData(DataTable Summary, DataTable NewIssue, DataTable Backlog) // Datatable contains data which we want to show in excel report
{
// create a new excel package for writing
using (ExcelPackage workingPkg = new ExcelPackage())
{
//create workbook
ExcelWorkbook wbReport = workingPkg.Workbook;
//Add worksheets in workbook
ExcelWorksheet ws = workingPkg.Workbook.Worksheets.Add("Summary.xlsx");
ExcelWorksheet ws1 = workingPkg.Workbook.Worksheets.Add("NewIssuance.xlsx");
ExcelWorksheet ws2 = workingPkg.Workbook.Worksheets.Add("BuyBack.xlsx");
ws.Cells["A1"].LoadFromDataTable(Summary, true, TableStyles.Medium1);
ws.Cells[ws.Dimension.Address].AutoFitColumns();
ws.Cells["A:H"].Style.Numberformat.Format = "#,##0";
ws1.Cells["A1"].LoadFromDataTable(NewIssuance, true, TableStyles.Medium1);
ws1.Cells[ws1.Dimension.Address].AutoFitColumns();
ws1.Cells["A:H"].Style.Numberformat.Format = "#,##0";
ws2.Cells["A1"].LoadFromDataTable(BuyBack, true, TableStyles.Medium1);
ws2.Cells[ws2.Dimension.Address].AutoFitColumns();
ws2.Cells["A:H"].Style.Numberformat.Format = "#,##0";
workingPkg.SaveAs(new FileInfo(ConfigurationManager.AppSettings["Location"] + DateTime.Now.ToString("_MM_yyyy")+".xlsx"));
}
}
}
에 오신 것을 환영합니다 SO 전치, 행에 의해 열, 행에 의해 엑셀 시트 컬럼에 데이터를 기록 할 수 있습니다! 사람들이 수천 줄의 코드를 게시하고 "나는 그 많은 곳에서 예외를 얻고 있습니다"라고 말할 때 그것을 좋아합니다. SO 질문에 대한 조언의 기본 비트 중 하나는 " 바쁜 동료에게 문제가 .. "- 동료 인 것처럼 상상해보십시오. 여기에서 설명하는 문제를 쉽게 파악할 수 있습니까? –
@CaiusJard 그리고 사람들이 "4 줄짜리 코드에서 어떻게 알아 내야할까요?"하고 말하기도합니다. 전체 코드를 게시하십시오. " 그 이유는, 먼저 (4 라인) 메소드 사용법을 게시 한 다음 그 아래에 전체 코드를 게시했습니다 (필요한 경우). 내가 알고있는 것은, 내가 실수하고있는 실수 (틀린 방식으로 메서드를 호출하는 것)를 수정하기 위해 도움이 필요하다는 것입니다. –
만약 내가 이것을 코딩했다면, 나는 datatable을 transposing하는 것을 방해하지 않을 것이다. 다른 방향으로 그것을 시트에 채우는 것이다. (시트를 채우는 것처럼 transpose를 수행한다.) –