2013-08-23 2 views
2

여러 클라이언트가 연결되는 서버를 만들고 서버에 몇 가지 16 진수 데이터를 보냅니다. 데이터는 서버에 의해 처리되고이 데이터를 엑셀 시트에 저장하려고합니다. 다음 코드를 사용하고 있지만이 때마다 Excel 파일이 열리고 데이터가 쓰여지고 닫힙니다. 또한 Excel 파일도 이미 존재해야합니다.C# 자동으로 엑셀 시트 만들기 및 데이터 저장

public class CreateExcelDoc 
{ 

    private static Excel.Workbook workbook = null; 

    private static Excel.Worksheet worksheet = null; 
    private static Excel.Range workSheet_range = null; 
    private static Excel.Application app = new Excel.Application(); 
private static Excel.Workbooks workbooks = app.Workbooks; 
    public static void createDoc() 
    { 
     object misValue = System.Reflection.Missing.Value; 
     try 
     { 
      workbook = workbooks.Open("C:\\Documents and Settings\\pratyush\\Desktop\\test.xlsx", misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue); 


      app.Visible = true; 
      worksheet = (Excel.Worksheet)workbook.Sheets[1]; 


     } 
     catch (Exception e) 
     { 
      Console.Write("Error"); 
     } 
     finally 
     { 

     } 
    } 

    public static void createHeaders(int row, int col, string htext, string cell1, string cell2, int mergeColumns, string b, bool font, int size, string fcolor) 
    { 
     worksheet.Cells[row, col] = htext; 
     workSheet_range = worksheet.get_Range(cell1, cell2); 
     workSheet_range.Merge(mergeColumns); 
     switch (b) 
     { 
      case "YELLOW": 
       workSheet_range.Interior.Color = System.Drawing.Color.Yellow.ToArgb(); 
       break; 
      case "GRAY": 
       workSheet_range.Interior.Color = System.Drawing.Color.Gray.ToArgb(); 
       break; 
      case "GAINSBORO": 
       workSheet_range.Interior.Color = System.Drawing.Color.Gainsboro.ToArgb(); 
       break; 
      case "Turquoise": 
       workSheet_range.Interior.Color = System.Drawing.Color.Turquoise.ToArgb(); 
       break; 
      case "PeachPuff": 
       workSheet_range.Interior.Color = System.Drawing.Color.PeachPuff.ToArgb(); 
       break; 
      default: 
       // workSheet_range.Interior.Color = System.Drawing.Color..ToArgb(); 
       break; 

     } 

     workSheet_range.Borders.Color = System.Drawing.Color.Black.ToArgb(); 
     workSheet_range.Font.Bold = font; 
     workSheet_range.ColumnWidth = size; 
     if (fcolor.Equals("")) 
     { 
      workSheet_range.Font.Color = System.Drawing.Color.White.ToArgb(); 
     } 
     else 
     { 
      workSheet_range.Font.Color = System.Drawing.Color.Black.ToArgb(); 
     } 

    } 
    public static void addData(int row, int col, string data, string cell1, string cell2, string format) 
    { 
     worksheet.Cells[row, col] = data; 
     workSheet_range = worksheet.get_Range(cell1, cell2); 
     workSheet_range.Borders.Color = System.Drawing.Color.Black.ToArgb(); 
     workSheet_range.NumberFormat = format; 
    } 

    public static void adddata() 
    { 
     createDoc(); 

     //creates the main header 
     createHeaders(5, 2, "Total of Products", "B5", "D5", 2, "YELLOW", true, 10, "n"); 
     //creates subheaders 
     createHeaders(6, 2, "Sold Product", "B6", "B6", 0, "GRAY", true, 10, ""); 


     //add Data to to cells 
     addData(7, 2, "114287", "B7", "B7", "#,##0"); 


     workbook.Close(true, System.Reflection.Missing.Value, System.Reflection.Missing.Value); 
     app.Quit(); 


    } 

    public static void Main() 
    { 
     adddata(); 
    } 
} 
} 

는 내가 원하는 내 서버 이름이 자동으로 클라이언트의 IP 주소입니다 새 Excel 파일을 생성하고이 서버에 의해 처리 된 후 데이터를 추가하고 자동으로 저장해야한다는 것입니다. 현재이 코드는 매번 파일을 열고 엑셀 파일에 데이터를 저장 한 다음 닫을 때부터 어떻게하면됩니까?

답변

2

EPPlus을 사용할 수 있습니다. Interop보다 무료이며 효율적입니다.

파일이 존재하면 삭제하고 new를 만들고 원하는대로 수행하십시오.

FileInfo newFile = new FileInfo(fileName); 
if (newFile.Exists) 
File.Delete(fileName); 
ExcelPackage pck = new ExcelPackage(newFile); 
..... //work with worksheets 
pck.Save(); 

EPPlus 웹 사이트에서 전체 샘플을 찾을 수 있습니다.

+0

감사합니다 Irfan 솔루션 – prattom

+0

당신은 환영합니다 :) – Irfan