파일 속성에 보관 속성 혹은 읽기 전용 속성이 켜져있는 경우, 해당 오류가 난다면 다음의 방법이 통할 수 있습니다.



--------------------------------------------------------------------------------------------------------------





The problem can be that you can not delete or overwrite read-only files. The solution is to change the attributes.

if(File.Exists(destFile))
{
    File.SetAttributes(destFile, FileAttributes.Normal);
}
File.Copy(sourcePath, destFile, true); 



----------------------------------------------------------------------------------------------------------------




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 변경하면 문제가 해결되었습니다.

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



PluginManager_v1.4.11_x64.zip








링크: https://support.microsoft.com/ko-kr/help/323246/how-to-upload-a-file-to-a-web-server-in-asp-net-by-using-visual-c-net

SSMS(SQL Server Management Studio) 다운로드

이 항목은 다음에 적용됩니다. 예SQL Server 예Azure SQL Database예Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스

SSMS는 SQL Server에서 SQL Database까지 모든 SQL 인프라를 관리하기 위한 통합 환경입니다. SSMS는 SQL의 인스턴스를 구성, 모니터링 및 관리하는 도구를 제공합니다. SSMS를 사용하면 응용 프로그램에 사용되는 데이터 계층 구성 요소를 배포, 모니터링 및 업그레이드하고 쿼리 및 스크립트를 작성할 수 있습니다.

로컬 컴퓨터 또는 클라우드 등 어디에서나 SSMS(SQL Server Management Studio)를 사용하여 데이터베이스 및 데이터 웨어하우스를 쿼리, 디자인 및 관리할 수 있습니다.

SSMS는 무료입니다.

SSMS 17.X는 SQL Server Management Studio의 최신 세대이며 SQL Server 2017을 지원합니다.

다운로드 SQL Server Management Studio 17.6 다운로드

다운로드 SQL Server Management Studio 17.6 업그레이드 패키지 다운로드(17.x에서 17.6으로 업그레이드)

경고

Maintenance Plans를 사용할 때 SSMS 17.6이 불안정해지고 크래시되는 알려진 문제가 있습니다. Maintenance Plans를 사용하는 경우에는 SSMS 17.6을 설치하지 마세요. 이미 17.6을 설치했고 이 문제가 발생할 경우 SSMS 17.5로 다운그레이드합니다.

버전 정보

릴리스 번호: 17.6
빌드 번호: 14.0.17230.0
릴리스 날짜: 2018년 3월 20일

SSMS 17.x 설치는 SSMS 16.x 이전 버전을 업그레이드 또는 대체하지 않습니다. SSMS 17.x는 이전 버전과 함께 설치되므로 두 버전을 모두 사용할 수 있습니다. 컴퓨터에 SSMS가 병렬로 설치되어 있으면 특정 요구에 맞는 올바른 버전을 시작해야 합니다. 최신 버전에는 Microsoft SQL Server Management Studio 17 레이블이 지정되며 새 아이콘이 추가됩니다.

SSMS 17.x

사용 가능한 언어

참고

영어 이외의 지역화된 SSMS 릴리스는 Windows 8, Windows 7, Windows Server 2012 및 Windows Server 2008 R2에 설치하는 경우 KB 2862966 보안 업데이트 패키지 가 필요합니다.

이 SSMS 릴리스는 다음 언어로 설치할 수 있습니다.

SQL Server Management Studio 17.6:
중국어(중국) | 중국어(대만) | 영어(미국) | 프랑스어 | 독일어 | 이탈리아어 | 일본어 | 한국어 | 포르투갈어(브라질) | 러시아어 | 스페인어

SQL Server Management Studio 17.6 업그레이드 패키지(17.x에서 17.6으로 업그레이드):
중국어(중국) | 중국어(대만) | 영어(미국) | 프랑스어 | 독일어 | 이탈리아어 | 일본어 | 한국어 | 포르투갈어(브라질) | 러시아어 | 스페인어

참고

SQL Server PowerShell 모듈은 이제 PowerShell 갤러리를 통해 별도로 설치됩니다. 자세한 내용은 SQL Server PowerShell 모듈 다운로드를 참조하세요.

SQL Server Management Studio

이 릴리스의 새로운 기능

SSMS 17.6은 최신 버전의 SQL Server Management Studio입니다. 17.X 세대의 SSMS는 SQL Server 2017을 통해 SQL Server 2008의 거의 모든 기능 영역을 지원합니다. 버전 17.x는 SQL Analysis Service PaaS도 지원합니다.

17.6 버전에는 다음이 포함됩니다.

일반 SSMS

SQL Database 관리되는 인스턴스:

  • Azure SQL Database 관리되는 인스턴스에 대한 지원을 추가했습니다. Azure SQL Database 관리되는 인스턴스(미리 보기)는 SQL Server 온-프레미스로 100%에 가까운 호환성, 일반적인 보안 문제를 해결하는 네이티브 VNet(가상 네트워크) 구현 및 온-프레미스 SQL Server 고객에 대한 편리한 비즈니스 모델을 제공하는 Azure SQL Database의 새로운 특성입니다.
  • 다음과 같은 일반적인 관리 시나리오에 대한 지원:
    • 데이터베이스 만들기 및 변경
    • 데이터베이스 백업 및 복원
    • 데이터 계층 응용 프로그램 가져오기, 내보내기, 추출 및 게시
    • 서버 속성 보기 및 변경
    • 전체 개체 탐색기 지원
    • 데이터베이스 개체 스크립팅
    • SQL 에이전트 작업에 대한 지원
    • 연결된 서버에 대한 지원
  • 여기에서 관리되는 인스턴스에 대해 자세히 알아봅니다.

개체 탐색기:

  • 개체 탐색기에서 쿼리 창으로 끌어다 놓을 때 이름 주변에 괄호를 적용하지 않도록 추가된 설정 (사용자 제안 32911933 및 32671051)

데이터 분류:

  • 일반 개선 사항 및 버그 수정

IS(Integration Services)

지원되는 SQL 서비스

  • 이 버전의 SSMS는 지원되는 모든 버전의 SQL Server 2008 - SQL Server 2017에서 작동하며 Azure SQL Database와 Azure SQL Data Warehouse의 최신 클라우드 기능 사용에 대해 최고 수준의 지원을 제공합니다.
  • SSMS 17.x를 사용하여 Linux의 SQL Server에 연결합니다.
  • 또한 SSMS 17.x는 SSMS 16.x 또는 SQL Server 2014 SSMS 및 이전 버전과 함께 설치할 수 있습니다.
  • SSIS(SQL Server Integration Services) - SSMS 버전 17.x는 레거시 SQL Server Integration Services 서비스에 대한 연결을 지원하지 않습니다.이전 버전의 레거시 Integration Services에 연결하려면 SQL Server의 버전과 정렬된 SSMS 버전을 사용합니다. 예를 들어 SSMS 16.x를 사용하여 레거시 SQL Server 2016 Integration Services 서비스에 연결합니다. SSMS 17.x 및 SSMS 16.x는 동일한 컴퓨터에 나란히 설치될 수 있습니다. SQL Server 2012 설치 이후 SSIS 카탈로그 데이터베이스인 SSISDB를 사용하여 Integration Services 패키지를 저장하고, 관리하고, 실행하고, 모니터링하는 것이 좋습니다. 자세한 내용은 SSIS 카탈로그를 참조하세요.

지원되는 운영 체제

이 SSMS 릴리스는 사용 가능한 최신 서비스 팩과 함께 사용할 경우 다음과 같은 64비트 플랫폼을 지원합니다.

  • Windows 10(64비트)
  • Windows 8.1(64비트)
  • Windows 8(64비트)
  • Windows 7(SP1)(64비트)
  • Windows Server 2016 *
  • Windows Server 2012 R2(64비트)
  • Windows Server 2012(64비트)
  • Windows Server 2008 R2(64비트)

* SSMS 17.X는 Windows Server 2016 이전에 출시된 Visual Studio 2015 격리 셸을 기반으로 합니다. Microsoft는 앱 호환성을 중요하게 생각하며 이미 제공된 응용 프로그램이 최신 Windows 버전에서 계속 실행되는지 확인합니다. Windows Server 2016에서 SSMS 실행 시 발생하는 문제를 최소화하려면 SSMS에 최신 업데이트가 모두 적용되어 있는지 확인합니다. Windows Server 2016에서 SSMS와 관련된 문제가 발생하는 경우 지원 센터로 문의하세요. 지원 팀에서는 문제가 SSMS, Visual Studio 또는 Windows 호환성과 관련이 있는지 확인합니다. 그런 후 해당 문제를 추가 조사를 위해 해당 팀으로 전송합니다.

SSMS 설치 팁 및 문제

설치 시 다시 부팅 최소화

  • SSMS 설치 프로그램에서 설치 후 다시 부팅하도록 요구할 가능성을 줄이려면 다음 작업을 수행합니다.
    • 최신 버전의 Visual C++ 2013 재배포 가능 패키지를 실행하고 있는지 확인합니다. 버전 12.0.40649.5 이상이 필요합니다. x64 버전만 필요합니다.
    • 컴퓨터의 .NET Framework 버전이 4.6.1 이상인지 확인합니다.
    • 컴퓨터에 열려 있는 다른 Visual Studio 인스턴스를 닫습니다.
    • 컴퓨터에 최신 OS 업데이트가 모두 설치되어 있는지 확인합니다.
    • 위에 언급한 작업은 일반적으로 한 번만 수행하면 됩니다. 동일한 주 버전의 SSMS로 추가 업그레이드를 수행하는 동안 다시 부팅해야 하는 몇 가지 경우가 있습니다. 부 버전 업그레이드의 경우 SSMS에 대한 모든 필수 조건이 컴퓨터에 이미 설치되어 있습니다.

릴리스 정보

다음은 이 17.6 릴리스의 문제 및 제한 사항입니다.

현재 유지 관리 계획에서 일정을 구성할 때 SSMS 17.6이 충돌하는 알려진 문제가 있습니다.

이전 릴리스

이전 SQL Server Management Studio 릴리스

피드백

needhelp_person_icon SQL 클라이언트 도구 포럼

info_tip 도움말 보기

참고 항목

콘텐츠 편집 SQL 설명서에 참여


+ Recent posts