2010-02-19 1 views
0

나는 여러 페이지가있는 스프레드 시트를 가지고 있습니다. 버튼을 클릭하면이 스프레드 시트를 열고 데이터베이스에서 반환 된 모든 데이터 (데이터 세트/데이터 테이블)를 작성해야합니다. 스프레드 시트의 페이지 중 하나. 데이터 시트를 새로운 엑셀 시트로 내보내는 기사가 너무 많습니다. 기존 스프레드 시트를 열고 asp.net/C#을 사용하여 데이터 세트를 작성합니까?기존 빈 스프레드 시트를 열고 그것에 데이터 쓰기

도와주세요 ..

감사합니다.

UPDATE :

기본적으로 나는 새로운 엑셀 시트에 데이터 집합을 내보내려면 다음과 같은 코드가 있습니다.

개인 무효 createDataInExcel (데이터 집합 DS)
{

Application oXL; 

    _Workbook oWB; 

    _Worksheet oSheet; 

    Range oRng; 

    string strCurrentDir = Server.MapPath(".") + "\\excelreports\\"; 

    try 
    { 

     oXL = new Application(); 

     oXL.Visible = false; 

     //Get a new workbook. 

     oWB = (_Workbook)(oXL.Workbooks.Add(Missing.Value)); 

     oSheet = (_Worksheet)oWB.ActiveSheet; 

     //System.Data.DataTable dtGridData=ds.Tables[0]; 

     int iRow = 2; 

     if (ds.Tables[0].Rows.Count > 0) 
     { 


      for (int j = 0; j < ds.Tables[0].Columns.Count; j++) 
      { 

       oSheet.Cells[1, j + 1] = ds.Tables[0].Columns[j].ColumnName; 

      } 

      // For each row, print the values of each column. 

      for (int rowNo = 0; rowNo < ds.Tables[0].Rows.Count; rowNo++) 
      { 

       for (int colNo = 0; colNo < ds.Tables[0].Columns.Count; colNo++) 
       { 

        oSheet.Cells[iRow, colNo + 1] = ds.Tables[0].Rows[rowNo][colNo].ToString(); 

       } 
       iRow++; 

      }    

     } 

     oRng = oSheet.get_Range("A1", "IV1"); 

     oRng.EntireColumn.AutoFit(); 

     oXL.Visible = false; 

     oXL.UserControl = false; 

     string strFile = "excelreport" + DateTime.Now.Ticks.ToString() + ".xls";//+ 

     oWB.SaveAs(strCurrentDir +strFile, XlFileFormat.xlWorkbookNormal, null, null, false, false, XlSaveAsAccessMode.xlShared, false, false, null,null, null); 

     // Need all following code to clean up and remove all references!!! 

     oWB.Close(null, null, null); 

     oXL.Workbooks.Close(); 

     oXL.Quit(); 

     Marshal.ReleaseComObject(oRng); 

     Marshal.ReleaseComObject(oXL); 

     Marshal.ReleaseComObject(oSheet); 

     Marshal.ReleaseComObject(oWB); 


    } 

    catch (Exception theException) 
    { 

     Response.Write(theException.Message); 

    } 
    Response.Write("data exported"); 

} 

는 기존 시트에 데이터 집합을 작성하는 위의 코드를 개선하기 위해? 또한 위의 코드로 가능은 쓸 분 정도 복용 엑셀 시트에 데이터가 .. 왜 그렇게 오랫동안 복용하고 있는지 이해할 수 없습니다.

답변

0

코드가있는 위치를 100 % 확신 할 수는 없지만 프로젝트에서 참조하는 Excel com 개체를 사용하면 Workbooks._Open 메서드를 사용하여 통합 문서를 열고 다음 시트 모음을 사용하여 이름으로 시트를 가져올 수 있습니다. 통합 문서 및 get_Item.

통합 문서에 시트를 추가해야하는 경우 시트에 추가 기능을 사용할 수 있습니다.

코드를 게시하면 개선 할 부분을 제안 할 수 있습니다.

oWB = (_Workbook)(oXL.Workbooks.Add(Missing.Value)); 

이 라인은 새 통합 문서를 만드는 것입니다. 지금은 새 시트를 추가 수행하려는 작업에 따라 달라집니다

string workbookPath = "c:/SomeWorkBook.xls"; 

oWB = Workbooks.Open(workbookPath, 
     0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", 
     true, false, 0, true, false, false); 

를 사용, 기존 시트 등

이 깊이 더 보여주는 CodeProject의 링크입니다을 사용 here

+0

감사 Pharabus.Iam 내 .xls 파일을 열어서 지금 쓸 수 있습니다. 필자는 엑셀 시트의 파일 다운로드를 올리고 파일 열기/저장을 허용하고자합니다. 엑셀 시트에 데이터를 쓰는 코드. HttpResponse 응답 = HttpContext.Current.Response; response.AddHeader ("Content-Disposition", "첨부 파일; filename = \"Mss.xls \ ""); 여기서 Mss.xls는 내 excel sheet의 이름입니다. 다운로드에서이 파일을 저장하려고 할 때 aspx 페이지가 복사되고 spreadsheet.please가 복사되지 않습니다. – kranthi

+0

실제로 파일을 응답 스트림에 쓰고 있습니까? Response.WriteFile (FilePath); Response.End(); – Pharabus

+0

당신은 바로 Pharabus입니다. 나는 WriteFile()을 호출하지 않았습니다. 당신에게 주어진 라인을 추가하면됩니다. 제가 남겨야 할 유일한 문제는 기존 코드를 열 때 내 코드가 약 5 초 정도 걸리는 것과 전체 데이터를 쓰십시오. 엑셀 시트에 약 500 개의 레코드를 씁니다. 오랜 시간이 걸릴 이유가 될 수 있습니까? 속도를 향상시킬 수있는 방법이 있습니까? 원래 질문에서 코드를 확인하십시오. 잘못된 것이 있다면? – kranthi

관련 문제