screen 사용법

http://sulac.egloos.com/5623987

Vi와 같이 쓰기 좋은 Screen..
매번 Vi로 열고 이동하기 힘들었는데.. 좋다.. 흐흐흐... 

시작. : screen -S 세션명

Ctrl+a A :현재 screen의 이름을 정한다. (나중에 Ctrl+a w 나 Ctrl+a "로 볼때 이름이 다 똑같아서 정의해 놓는게 정신건강에 좋다)
Ctrl+a c : screen에서 새창 띄우기
Ctrl+a k : 현재 screen 죽이기.


Ctrl+a a : 바로 전 창으로
Ctrl+a n : 다음 창으로 
Ctrl+a p: 이전 창으로 

Ctrl+a " : 열린 screen list 을 보여줌.

Ctrl+a 0 : 0번째 창으로
Ctrl+a 1 : 1번째 창으로
Ctrl+a 9 : 10번째 창으로

Ctrl+a d : screen 때어내기 (현재 상태로 남겨두는거..)
Ctrl+a x : 이전에 남겨둔 screen에 다시 붙이기.
screen -r 세션명 : 강제로 종료된거에 다시 붙이기

ps -eaf | grep screen : 여러개 열려있을 경우 찾아서 죽여주는 센스.

screen -list : 현재 열려있는 리스트를 보여줌.

Ctrl+a ?  : 도움말
Ctrl+a k  : 스크린 닫기
Ctrl+a ESC, Ctrl+a [   : 화면 스크롤
Ctrl+a ] : 붙여넣기.

Ctrl+a S          화면 수평 분할
Ctrl+a |            화면 수직 분할
Ctrl + a :resize   resize region 
Ctrl + a :fit         fit screen size to new terminal size
Ctrl +a :remove  remove region
Ctrl+a Q           현재 region을 제외한 나머지 숨기기
Ctrl+ a tab      화면 분할 이동
Ctrl+a, :            명령행 모드로 전환

Ctrl+ X        : 현재 화면 닫기

마지막 종료는 exit로 하면 깔끔하게 나온다고 함. 

screen을 사용할때 마우스 휠로 올리거나 내리는게 안되는데... 이걸 해결하는 방법을 찾았다.
~/.screenrc에 아래 두줄을 추가하면.. 된다.. (문제는 창을 두개로 띄웠을때는 안되네 ㅡ.ㅡ)
defscrollback 5000
termcapinfo xterm* ti@:te@

추가적으로... 그냥 키보드로 정보를 보고 싶으면....
Ctrl+a, [ 누른후 화살표로 움직이면 된다. ^^;

screen으로 화면을 분할해서 사용할때 다음 창으로 가는게 ctrl+a - tab 만 있는줄 알았으나.. 입맛대로 수정하면 되네..
아래처럼 각 키를 넣어서 사용할수 있다.. ㅋㅋㅋ
$ vi .screenrc 
bind j focus down
bind k focus up
bind t focus top
bind b focus bottom



더 보시고 싶은 분들은 /usr/doc/screen 나 man을 활용하시기 바랍니다.

screen -h
-a            Force all capabilities into each window's termcap.
-A -[r|R]     Adapt all windows to the new display width & height.
-c file       Read configuration file instead of '.screenrc'.
-d (-r)       Detach the elsewhere running screen (and reattach here).
-dmS name     Start as daemon: Screen session in detached mode.
-D (-r)       Detach and logout remote (and reattach here).
-D -RR        Do whatever is needed to get a screen session.
-e xy         Change command characters.
-f            Flow control on, -fn = off, -fa = auto.
-h lines      Set the size of the scrollback history buffer.
-i            Interrupt output sooner when flow control is on.
-l            Login mode on (update /var/run/utmp), -ln = off.
-list         or -ls. Do nothing, just list our SockDir.
-L            Turn on output logging.
-m            ignore $STY variable, do create a new screen session.
-O            Choose optimal output rather than exact vt100 emulation.
-p window     Preselect the named window if it exists.
-q            Quiet startup. Exits with non-zero return code if unsuccessful.
-r            Reattach to a detached screen process.
-R            Reattach if possible, otherwise start a new session.
-s shell      Shell to execute rather than $SHELL.
-S sockname   Name this session <pid>.sockname instead of <pid>.<tty>.<host>.
-t title      Set title. (window's name).
-T term       Use term as $TERM for windows, rather than "screen".
-U            Tell screen to use UTF-8 encoding.
-v            Print "Screen version 4.00.03jw4 (FAU) 2-May-06".
-wipe         Do nothing, just clean up SockDir.
-x            Attach to a not detached screen. (Multi display mode).
-X            Execute <cmd> as a screen command in the specified session.

                                 Screen key bindings, page 1 of 1.

                                 Command key:  ^A   Literal ^A:  a

 break       ^B b        history     { }         other       ^A          split       S
 clear       C           info        i           pow_break   B           suspend     ^Z z
 colon       :           kill        K k         pow_detach  D           time        ^T t
 copy        ^[ [        lastmsg     ^M m        prev        ^H ^P p ^?  title       A
 detach      ^D d        license     ,           quit        \           vbell       ^G
 digraph     ^V          lockscreen  ^X x        readbuf     <           version     v
 displays    *           log         H           redisplay   ^L l        width       W
 dumptermcap .           login       L           remove      X           windows     ^W w
 fit         F           meta        a           removebuf   =           wrap        ^R r
 flow        ^F f        monitor     M           reset       Z           writebuf    >
 focus       ^I          next        ^@ ^N sp n  screen      ^C c        xoff        ^S s
 hardcopy    h           number      N           select      '           xon         ^Q q
 help        ?           only        Q           silence     _

^]   paste .
"    windowlist -b
-    select -
0    select 0
1    select 1
2    select 2
3    select 3
4    select 4
5    select 5
6    select 6
7    select 7
8    select 8
9    select 9
I    login on
O    login off
]    paste .
|    split -v
:kB: focus up

가끔 screen이 먹통이 될때.. 아래의 방법을 사용하면 된다.
요약하면
screen -ls로 리스트 보고
screen -r name 쳐서 붙이고
Ctrl+a 누르고 :quit 치면...
screen이 죽는다.. 라는거다.. 
 
  1. type "screen -list" to identify the (detached) screen session. eg: screen -list There are screens on: 20751.Melvin_Peter_V42 (Detached) Note: "20751.Melvin_Peter_V42" is your session id.

  2. get attached to the detached screen session eg: screen -r 20751.Melvin_Peter_V42

  3. Once connected to the session which might or might not respond, do the following. press "Ctrl + a" (there wont be any changes in your window now) type ":quit" ( its a colon[:] followed quit)

  4. Thats its your remote screen session will be terminated now.

  5. Hope this helps.



Create/Read/Edit Advance Excel 2007/2010 Report in C#.Net using EPPlus

13 Nov 2013
Export Advance Excel 2007 Report

Contents

Introduction

Recently I was looking for an Advance tool through which I can generate complex Excel Reports. And after going through many tools I found EP Plus. For further details see this link. Through this tool we can easily create reports with charts, graphs and other drawing objects. I have planned to shared few samples with the community, so if any one is interested in using this library he will get a good kick start.

Requirements

  • To compile the library, you need a C# 2010 Compiler or better, such as Visual Studio 2010 or Visual C# 2010 Express Edition.
  • To run the library code you need to have the .NET 4.0 framework installed.

Installation

Or you can download the library DLL from the above link. Then do the following:

  • Add the following library into your peoject by adding reference to that library dll.
  • After adding the reference you'll see the following scene in your 'Solution Explorer' window of your Visual Studio: 
    Added Reference
  • Then add these namespace into your C# file like this:
    /* To work eith EPPlus library */
    using OfficeOpenXml;
    using OfficeOpenXml.Drawing;
    
    /* For I/O purpose */
    using System.IO;
    
    /* For Diagnostics */
    using System.Diagnostics;

Quick Start

1. Reading From Excel Sheet into DataTable:

Reading a simple excel sheet containing text and number into DataTable.

private DataTable WorksheetToDataTable(ExcelWorksheet oSheet)
{
	int totalRows = oSheet.Dimension.End.Row;
	int totalCols = oSheet.Dimension.End.Column;
	DataTable dt = new DataTable(oSheet.Name);
	DataRow dr = null;
	for (int i = 1; i <= totalRows; i++)
	{
		if (i > 1) dr = dt.Rows.Add();
		for (int j = 1; j <= totalCols; j++)
		{
			if (i == 1)
				dt.Columns.Add(oSheet.Cells[i, j].Value.ToString());
			else
				dr[j - 1] = oSheet.Cells[i, j].Value.ToString();
		}
	}
	return dt;
}

How you do this in this project?

Import Excel 

Select Excel 2007 File 

The Sample Excel file is the following:

Sample Excel File 

Enter Sheet Name 

The Final Resule is below:

Final Output

2. Setting Excel Workbook Properties:

The Useful properties which you can set are:

  • Name of the Application by 'Application' property.
  • Version of the Application by 'AppVersion' property.
  • Name of the Author by 'Author' property.
  • Category of the Workbook by 'Category' property.
  • Comments in the Workbook by 'Comments' property.
  • Name of the Company by 'Company' property.
  • Last Modified Date of the Workbook by 'LastModifiedBy' property.
  • Last Printed Date of the Workbook by 'LastPrinted' property.
  • Keywords in Workbook if any by 'Keywords' property.
  • Status of the Workbook by 'Status' property.
  • Subject of the Workbook by 'Subject' property.
  • Title of the Workbook by 'Title' property.

In the following way you can set the properties:

using (ExcelPackage excelPkg = new ExcelPackage())
{
	excelPkg.Workbook.Properties.Author = "Debopam Pal";
	excelPkg.Workbook.Properties.Title = "EPPlus Sample";
}

3. Merge Excel Columns:

Merge Excell Cells by providing the Row Index and Column Index of the Start Cell and the End Cell. The syntax is: Cell[fromRow, fromCol, toRow, toCol]. In the following way you can merge excel cells:

//Merge Excel Columns: Merging cells and create a center heading for our table
oSheet.Cells[1, 1].Value = "Sample DataTable Export";
oSheet.Cells[1, 1, 1, dt.Columns.Count].Merge = true;

4. Setting Excel Cell Background Color and Fill Style:

The following Fill Styles are available under OfficeOpenXml.Style.ExcelFillStyle:

  • DarkDown
  • DarkGrey
  • DarkGrid
  • DarkHorizontal
  • DarkTrellis
  • DarkUp
  • DarkVertical
  • Gray0625
  • Gray125
  • LightDown
  • LightGrey
  • LightHorizontal
  • LightTrellis
  • LightUp
  • LightVertical
  • MediumGrey
  • None
  • Solid

You can use any color from System.Drawing.Color as your Background Color. In the following way you can set the Background Color along with Fill Style:

var cell = oSheet.Cells[rowIndex, colIndex];

//Setting the background color of header cells to Gray
var fill = cell.Style.Fill;
fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
fill.BackgroundColor.SetColor(Color.Gray);

5. Setting Excel Cell Border:

The following Border styles are available under OfficeOpenXml.Style.ExcelBorderStyle:

  • DashDot
  • DashDotDot
  • Dashed
  • Dotted
  • Double
  • Hair
  • Medium
  • MediumDashDot
  • MediumDashDotDot
  • MediumDashed
  • None
  • Thick
  • Thin

In the following way you can set the border style of a cell:

var cell = oSheet.Cells[rowIndex, colIndex];

//Setting top,left,right,bottom border of header cells
var border = cell.Style.Border;
border.Top.Style = border.Left.Style = border.Bottom.Style = border.Right.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin;

6. Setting Excel Formula:

var cell = oSheet.Cells[rowIndex, colIndex];

//Setting Sum Formula for each cell
// Usage: Sum(From_Addres:To_Address)
// e.g. - Sum(A3:A6) -> Sums the value of Column 'A' From Row 3 to Row 6
cell.Formula = "Sum(" + oSheet.Cells[3, colIndex].Address + ":" + oSheet.Cells[rowIndex - 1, colIndex].Address + ")";

7. Add Comments in Excel Cell:

///
<summary>
/// Adding custom comment in specified cell of specified excel sheet
/// </summary>
///
<param name="oSheet" />The ExcelWorksheet object
/// <param name="rowIndex" />The row number of the cell where comment will put
/// <param name="colIndex" />The column number of the cell where comment will put
/// <param name="comment" />The comment text
/// <param name="author" />The author name
private void AddComment(ExcelWorksheet oSheet, int rowIndex, int colIndex, string comment, string author)
{
	// Adding a comment to a Cell
	oSheet.Cells[rowIndex, colIndex].AddComment(comment, author);
}

8. Add Image in Excel Sheet:

///
<summary>
/// Adding custom image in spcified cell of specified excel sheet
/// </summary>
///
<param name="oSheet" />The ExcelWorksheet object
/// <param name="rowIndex" />The row number of the cell where the image will put
/// <param name="colIndex" />The column number of the cell where the image will put
/// <param name="imagePath" />The path of the image file
private void AddImage(ExcelWorksheet oSheet, int rowIndex, int colIndex, string imagePath)
{
	Bitmap image = new Bitmap(imagePath);
	ExcelPicture excelImage = null;
	if (image != null)
	{
		excelImage = oSheet.Drawings.AddPicture("Debopam Pal", image);
		excelImage.From.Column = colIndex;
		excelImage.From.Row = rowIndex;
		excelImage.SetSize(100, 100);
		// 2x2 px space for better alignment
		excelImage.From.ColumnOff = Pixel2MTU(2);
		excelImage.From.RowOff = Pixel2MTU(2);
	}
}

public int Pixel2MTU(int pixels)
{
	int mtus = pixels * 9525;
	return mtus;
}

9. Add Custom objects in Excel Sheet:

The all shapes are available under enum eShapeStyle. In the following way we can create object of the specified shape and inserting text inside it.

///
<summary>
/// Adding custom shape or object in specifed cell of specified excel sheet
/// </summary>
///
<param name="oSheet" />The ExcelWorksheet object
/// <param name="rowIndex" />The row number of the cell where the object will put
/// <param name="colIndex" />The column number of the cell where the object will put
/// <param name="shapeStyle" />The style of the shape of the object
/// <param name="text" />Text inside the object
private void AddCustomObject(ExcelWorksheet oSheet, int rowIndex, int colIndex, eShapeStyle shapeStyle, string text)
{
	ExcelShape excelShape = oSheet.Drawings.AddShape("Custom Object", shapeStyle);
	excelShape.From.Column = colIndex;
	excelShape.From.Row = rowIndex;
	excelShape.SetSize(100, 100);
	// 5x5 px space for better alignment
	excelShape.From.RowOff = Pixel2MTU(5);
	excelShape.From.ColumnOff = Pixel2MTU(5);
	// Adding text into the shape
	excelShape.RichText.Add(text);
}

public int Pixel2MTU(int pixels)
{
	int mtus = pixels * 9525;
	return mtus;
}

The Final Exported Excel file:

Exported Excel File

10. Create a New Excel Sheet from an Existing Excel Sheet or Template:

Now, we're going to take the Existing Excel Sheet what we've got from the extension of this article. The name of the existing excel sheet was 'Sample1.xlsx'. Now we are going to create 'Sample2.xlsx' by taking values from 'Sample1.xlsx' and adding some new values.

Here is 'Sample1.xlsx':

Sample1.xlsx

Now, see how you can do it:

// Taking existing file: 'Sample1.xlsx'. Here 'Sample1.xlsx' is treated as template file
FileInfo templateFile = new FileInfo(@"Sample1.xlsx");
// Making a new file 'Sample2.xlsx'
FileInfo newFile = new FileInfo(@"Sample2.xlsx");

// If there is any file having same name as 'Sample2.xlsx', then delete it first
if (newFile.Exists)
{
	newFile.Delete();
	newFile = new FileInfo(@"Sample2.xlsx");
}

using (ExcelPackage package = new ExcelPackage(newFile, templateFile))
{
	// Openning first Worksheet of the template file i.e. 'Sample1.xlsx'
	ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
	// I'm adding 5th & 6th rows as 1st to 4th rows are already filled up with values in 'Sample1.xlsx'
	worksheet.InsertRow(5, 2);

	// Inserting values in the 5th row
	worksheet.Cells["A5"].Value = "12010";
	worksheet.Cells["B5"].Value = "Drill";
	worksheet.Cells["C5"].Value = 20;
	worksheet.Cells["D5"].Value = 8;

	// Inserting values in the 6th row
	worksheet.Cells["A6"].Value = "12011";
	worksheet.Cells["B6"].Value = "Crowbar";
	worksheet.Cells["C6"].Value = 7;
	worksheet.Cells["D6"].Value = 23.48;
}

11. Adding 'R1C1' Formula in the Excel Cell:

Now, we're going to add formula for 'Value' column i.e. 'E' as the values in column 'E' come from the product of 'Quantity' and 'Price' column, as you can see in the above picture of Sample1.xlsx. In the Extension of this Article, I've told how to add basic formula in this respect. So, I hope, you're now able to add basic formula:) Now, we're going to see how we add 'R1C1' formula. If you don't know what it is, just click here...I'm waiting for you here:) Lets see:

worksheet.Cells["E2:E6"].FormulaR1C1 = "RC[-2]*RC[-1]";

Just one line of code, its so simple:)

12. Adding 'Named Range' in the Excel Sheet:

You don't know 'Excel Named Range'? No problem, just read a few lines here. Like the following way we can add Named Range:

var name = worksheet.Names.Add("SubTotalName", worksheet.Cells["C7:E7"]);

By the following way we can add any formula to the Named Range:

name.Formula = "SUBTOTAL(9, C2:C6)";

13. Adding Pie Chart in the Excel Sheet:

Read about Excel Chart here.
Read about Pie Chart here.
EPPlus Library suport following type of chart below:

  • Area
  • Area3D
  • AreaStacked
  • AreaStacked100
  • AreaStacked1003D
  • AreaStacked3D
  • BarClustered
  • BarClustered3D
  • BarOfPie
  • BarStacked
  • BarStacked100
  • BarStacked1003D
  • BarStacked3D
  • Bubble
  • Bubble3DEffect
  • Column3D
  • ColumnClustered
  • ColumnClustered3D
  • ColumnStacked
  • ColumnStacked100
  • ColumnStacked1003D
  • ColumnStacked3D
  • ConeBarClustered
  • ConeBarStacked
  • ConeBarStacked100
  • ConeCol
  • ConeColClustered
  • ConeColStacked
  • ConeColStacked100
  • CylinderBarClustered
  • CylinderBarStacked
  • CylinderBarStacked100
  • CylinderCol
  • CylinderColClustered
  • CylinderColStacked
  • CylinderColStacked100
  • Doughnut
  • DoughnutExploded
  • Line
  • Line3D
  • LineMarkers
  • LineMarkersStacked
  • LineMarkersStacked100
  • LineStacked
  • LineStacked100
  • Pie
  • Pie3D
  • PieExploded
  • PieExploded3D
  • PieOfPie
  • PyramidBarClustered
  • PyramidBarStacked
  • PyramidBarStacked100
  • PyramidCol
  • PyramidColClustered
  • PyramidColStacked
  • PyramidColStacked100
  • Radar
  • RadarFilled
  • RadarMarkers
  • StockHLC
  • StockOHLC
  • StockVHLC
  • StockVOHLC
  • Surface
  • SurfaceTopView
  • SurfaceTopViewWireframe
  • SurfaceWireframe
  • XYScatter
  • XYScatterLines
  • XYScatterLinesNoMarkers
  • XYScatterSmooth
  • XYScatterSmoothNoMarkers
Now, I'm going to show you how you can create a Simple Pie Chart. I hope from this concept you will be able to create another type of Chart mentioned above. Let see how to create Pie Chart using EPPlus:
First you need to add OfficeOpenXml.Drawing.Chart namespace to work with Chart. Now see the code below:

// Adding namespace to work with Chart
using OfficeOpenXml.Drawing.Chart;

// Adding Pie Chart to the Worksheet and assigning it in a variable 'chart'
var chart = (worksheet.Drawings.AddChart("PieChart", OfficeOpenXml.Drawing.Chart.eChartType.Pie3D) as ExcelPieChart);

Setting title text of the chart:

chart.Title.Text = "Total";

Setting Chart Position: 5 pixel offset from 5th column of the 1st row:

chart.SetPosition(0, 0, 5, 5);

Setting width & height of the chart area:

chart.SetSize(600, 300);

In the Pie Chart value will come from 'Value' column and category name come from the 'Product' column, see how to do it:

ExcelAddress valueAddress = new ExcelAddress(2, 5, 6, 5);
var ser = (chart.Series.Add(valueAddress.Address, "B2:B6") as ExcelPieChartSerie);

Setting Chart Properties:

// To show the Product name within the Pie Chart along with value
chart.DataLabel.ShowCategory = true;
// To show the value in form of percentage
chart.DataLabel.ShowPercent = true;

Formmatting the style of the Chart:

chart.Legend.Border.LineStyle = eLineStyle.Solid;
chart.Legend.Border.Fill.Style = eFillStyle.SolidFill;
chart.Legend.Border.Fill.Color = Color.DarkBlue;

Finally Expoted Excel is here:

Sample2.xlsx

Declaration

Please Download the source code for detail. I hope you'll understand as the source
			code is documented. If any doubt, just post your comment below. Thank You.

History

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Debopam Pal
Software Developer National Informatics Centre (NIC)
India India
Hello! Myself Debopam Pal. I've completed my MCA degree from West Bengal University of Technology at 2013. I'm from India. I’ve started to work with MS Technologies in 2013 specially in C# 4.0, ASP.NET 4.0. I've also worked in PHP 5. Now I work in JAVA/J2EE, Struts2. Currently I'm involved in a e-Governance Project since Jan, 2014. In my leisure time I write Blog, Articles as I think that every developer should contribute something otherwise resource will be finished one day. Thank you for your time.

Visit: Linkedin Profile | Facebook Profile | Google+ Profile | CodeProject Profile


'Knowledge' 카테고리의 다른 글

서브도메인과 블로그 연동하기  (0) 2018.05.06
[리눅스] 스크린 명령어  (0) 2018.05.01
[ASP.NET] [EPPlus] Create Excel Files in C#  (0) 2018.05.01
[ASP.NET] 파일 다운로드를 구현하는 방법  (0) 2018.05.01
[.NET] SFTP  (0) 2018.04.27

Create Excel Files in C#

April 23, 2017 

Creating report files in Excel format is a feature that many users need out of their software applications.  

In this article. we'll cover creating an Excel spreadsheet in C# using a third-party library called EPPlus.

EPPlus is a .NET library that reads and writes Excel files using the Open Office XML format (*.xlsx).  It is licensed under GNU Library General Public License (LGPL) so it can be freely used in commercial software.

Installation

In Visual Studio 2017, go to Tools -> NuGet Package Manager -> Package Manager Console

In the console window that appears, type the following at the prompt to install it into the current project:

PM > Install-Package EPPlus

After it is finished, check the References under Solution Explorer and verify that the EPPlus assembly is listed.

Add to Project

We add line 7 below so we can use the types inside the namespace:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using OfficeOpenXml;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

Create a Workbook

We call the ExcelPackage class constructor to create a workbook.   In the below code, we do this within a using block so we don't have to explicitly dispose of the object.

We add 3 blank worksheets to the workbook by using the Add() method in the Worksheets class.   Finally, we save the file to a path using the SaveAs() method.

using (ExcelPackage excel = new ExcelPackage())
{
  excel.Workbook.Worksheets.Add("Worksheet1");
  excel.Workbook.Worksheets.Add("Worksheet2");
  excel.Workbook.Worksheets.Add("Worksheet3");

  FileInfo excelFile = new FileInfo(@"C:\Users\amir\Desktop\test.xlsx");
  excel.SaveAs(excelFile);
}

The SaveAs method will throw an exception if there are no worksheets defined. 

Select a Worksheet

Let's say we want to add some data to Worksheet1.   How can we target it?

var excelWorksheet = excel.Workbook.Worksheets["Worksheet1"];

Add a Row

Spreadsheets typically have header rows.  Let's add a header row to Worksheet1.  

For this, we create a List containing an array of strings:

List<string[]> headerRow = new List<string[]>()
{
  new string[] { "ID", "First Name", "Last Name", "DOB" }
};

Before we can pass this object into our worksheet, we must figure out the cell range for the header row:

// Determine the header range (e.g. A1:E1)
string headerRange = "A1:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + "1";

Here's how we load the data into the worksheet:

// Popular header row data
excelWorksheet.Cells[headerRange].LoadFromArrays(headerRow);

Putting it all together here is the code block:

using (ExcelPackage excel = new ExcelPackage())
{
  excel.Workbook.Worksheets.Add("Worksheet1");
  excel.Workbook.Worksheets.Add("Worksheet2");
  excel.Workbook.Worksheets.Add("Worksheet3");
  
  var headerRow = new List<string[]>()
  {
    new string[] { "ID", "First Name", "Last Name", "DOB" }
  };
  
  // Determine the header range (e.g. A1:D1)
  string headerRange = "A1:" + Char.ConvertFromUtf32(headerRow[0].Length + 64) + "1";

  // Target a worksheet
  var worksheet = excel.Workbook.Worksheets["Worksheet1"];
  
  // Popular header row data
  worksheet.Cells[headerRange].LoadFromArrays(headerRow);
  
  FileInfo excelFile = new FileInfo(@"C:\Users\amir\Desktop\test.xlsx");
  excel.SaveAs(excelFile);
}

If we open the file in Excel, we see that the header row appears in the first worksheet:


Row Styling

We can easily change the font size, color, and weight of any row.

worksheet.Cells[headerRange].Style.Font.Bold = true;
worksheet.Cells[headerRange].Style.Font.Size = 14;
worksheet.Cells[headerRange].Style.Font.Color.SetColor(System.Drawing.Color.Blue);

 

Add Data to Specific Cell

We can easily add data to a cell by setting the Value property of the Cell element.

worksheet.Cells["A1"].Value = "Hello World!";

Add Data to Multiple Cells

Inserting data into multiple cells is also straightforward.   We can populate a list containing an array that corresponds to each row.    

var cellData= new List()
{
  new object[] {0, 0, 0, 1},
  new object[] {10,7.32,7.42,1},
  new object[] {20,5.01,5.24,1},
  new object[] {30,3.97,4.16,1},
  new object[] {40,3.97,4.16,1},
  new object[] {50,3.97,4.16,1},
  new object[] {60,3.97,4.16,1},
  new object[] {70,3.97,4.16,1},
  new object[] {80,3.97,4.16,1},
  new object[] {90,3.97,4.16,1},
  new object[] {100,3.97,4.16,1}
};

excelWorksheet.Cells[2, 1].LoadFromArrays(cellData);

Here we add the data from cellData into the worksheet starting on row 2, column 1.   Remember that we already inserted a header row on row 1.

Check if Excel is installed

We can use this line of code to determine if Excel is installed:

bool isExcelInstalled = Type.GetTypeFromProgID("Excel.Application") != null ? true : false;

If the expression evaluates to true, then we can safely open the file using the below code:

if (isExcelInstalled) 
{
  System.Diagnostics.Process.Start(excelFile.ToString());
}

What about Microsoft.Office.Interop.Excel?

If the user has Excel installed on their machine, we could tap into the Microsoft.Office.Interop.Excel assembly which instructs .NET on how to call the Excel COM libraries.

This approach has a couple flaws though.   Excel file generation would fail if the user didn't have Excel installed.  Also, what happens when the version of the assembly we're using is incompatible with the latest version of Excel?

A software application shouldn't rely on an Excel installation in order to create a spreadsheet which is why I discourage using Microsoft.Office.Interop.Excel.



asp.net에서 파일 다운로드를 구현하는 방법asp.net


 Answers

http://forums.asp.net/p/1481083/3457332.aspx

string filename = @"Specify the file path in the server over here....";
FileInfo fileInfo = new FileInfo(filename);

if (fileInfo.Exists)
{
   Response.Clear();
   Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
   Response.AddHeader("Content-Length", fileInfo.Length.ToString());
   Response.ContentType = "application/octet-stream";
   Response.Flush();
   Response.TransmitFile(fileInfo.FullName);
   Response.End();
}


최신 정보:

초기 코드

Response.AddHeader("Content-Disposition", "inline;attachment; filename=" + fileInfo.Name);

"인라인, 첨부"즉 콘텐츠 처리를위한 두 개의 값을가집니다.

정확히 언제 시작되었는지는 모르지만 Firefox에서는 적절한 파일 이름  나타나지 않습니다. 파일 다운로드 상자에 웹 페이지 이름과 확장명 ( pagename.aspx )이 나타납니다. 다운로드 후 실제 이름으로 다시 이름을 바꿉니다. 파일이 성공적으로 열립니다.

이 페이지 는 First Come First Served (첫 번째 Come First Served) 방식으로 운영 됩니다 . 값을 attachment 변경하면 문제가 해결되었습니다.

추신 : 이것이 최선의 관행인지 확실하지 않지만 문제가 해결되었습니다.


+ Recent posts