I am completely new to Npoi and I am struggling trying to find some information on how to create a basic spreadsheet from a DataSet.
I have a DataSet being returned that will only ever contain one table I am trying to get the columns and values from these columns into an dynamically generated excel file that I can allow users to download.
So far I have been able to create the workbook and sheet but I can't figure out how to properly populate sheet using the Npoi.dll
My code for creating the workbook (so far) is as follows:
private void CreateWorkbook(DataSet ds)
{
var table = ds.Tables[0];
var workbook = new HSSFWorkbook();
var sheet = workbook.CreateSheet();
foreach (DataColumn col in table.Columns)
{
//seems like I should create the columns for the sheet here
foreach (DataRow row in table.Rows)
{
sheet.CreateRow(); //then populate each column with the approriate data
}
}
}
In addition, and I may be missing something but where is all the documentation Npoi on codeplex mentions, I cannot find anything relevant for Mvc apps dynamically creating a sheet and returning it to the client? What I am trying to accomplish is to create create the file and pass it to the client without storing it on the server.
I'm sure this is basic but I can't figure out where to look for information. I'd appreciate any suggestions.
-cheers
A couple links that got me started:
How to read in XLSX data for editing with NPOI
Creating Excel spreadsheets .XLS and .XLSX in C#
And finally at quick overview of basic functions from the POI documentation like reading a named range, collapsing rows, etc. As NPOI is a close match to POI the guide is fairly effective.
Busy Developers' Guide to HSSF and XSSF Features
Related
I would like to see your help on how to parse an excel file in mvc c# but, accessing its cell address like:
var a = Excel_cell{A1:B1}
model.a = a
I've looked to various plugin like excelfilereader, epplus and also javascript libraries like sheetjs and alike but, they do the same where they parse the whole file with the layout of a table...
My excel file is quite complicated because it has no headers and its data is on the right side.
EG:
I apologize if I put an image here...
My requirement is read an excel template, and save its data to the database.. I dont need to send the file to server because it will not be beneficial in the long run
Im hoping you could help me... An idea how to accomplish this would be really help.
You can try by using Spire.XLS, It's a good library that helps you read and write (this one only with a license) excel files and some other formats, it's easy to use and intuitive, for example this would be the code to get an excel file and read some cells:
//Create a variable to access the excel file
Workbook yourFile = new Workbook();
Stream stream = new MemoryStream(FilePath);
//Load the excel file into the variable
workbook.LoadFromStream(stream);
//Select the worksheet you want to take values from
var firstSheet = workbook.Worksheets.Where(x => x.Name == "Name of the sheet").First() as Worksheet;
string value = firstsheet.Range[A1].Text;
So with this code you have populated a variable with the excel file, a variable with a specific sheet (for example the first one), and then you save the text value of a specific cell of your choice in another variable, let me know if I got it right
EDIT: This is their site and this is the nuget gallery
I am trying to get names of the selected sheets in Excel. I have 4-5 worksheets in my excel file. User is supposed to select two of them and then my application scans specific columns and compare values. However I could not find a way in C# to get names of the worksheets when user selects more than one sheet. User can also delete these selected worksheets via the application. Any ideas?
Using VSTO:
var sheets = Application.ActiveWindow.SelectedSheets;
var names = new List<string>();
foreach (Excel.Worksheet sh in sheets)
{
names.Add(sh.Name);
}
One way is to use Spreadsheetgear: Link to Spreadsheetgear website
This is the easiest solution to manipulating Excel workbooks I tryed. But quite expensive.
If you're after a free solution, have a look at Excel Package Plus: http://epplus.codeplex.com/
It should have all the features that you require.
I am using c#.net web application where i am using MySQL DB, my requirement is i want to export table data as in Excel format. please tell me how it is possible
The easiest way would be to render your data to a (html) table in plain text format. Excel loads such tables and even allows some basic and advanced configurations in css styles.
However, the other options presented here are more stable and of course recommended. But for a quick and dirty hack, a plain html table will do the trick as well.
CSV (comma separated values) are common format for Excel. It is, probably, the easiest way to export data. And very portable :)
Depending on what u really need i don't know for sure, why do u want to export table data into a Excel format? I would use SSIS with as source a odbc connection and as destination an excel connection. U'll only need to have sql server to execute the SSIS package, but will work for MySQL as source. U can execute that SSIS package in runtime behind the HttpPOST and return the uri to the excel document or something like that.
PS: This might be an elephant for your solution, as i said: depending on what u really need :)
C#.NET can access MySQL data with ADO.NET: so you can use DataReader or DataTable as well. Remember to use the correct SqlClient. Create and save a flat .csv file with the extracted data.
I am using ExcelPackagePlus for that purpose (only xlsx !), here is a method that exports DataTable to xlsx :
public static MemoryStream DataSetToExcelXlsx(DataTable table, string sheetName)
{
MemoryStream Result = new MemoryStream();
ExcelPackage pack = new ExcelPackage();
ExcelWorksheet ws = pack.Workbook.Worksheets.Add(sheetName);
int col = 1;
int row = 1;
foreach (DataRow rw in table.Rows)
{
foreach (DataColumn cl in table.Columns)
{
if (rw[cl.ColumnName] != DBNull.Value)
ws.Cells[row, col].Value = rw[cl.ColumnName].ToString();
col++;
}
row++;
col = 1;
}
pack.SaveAs(Result);
return Result;
}
How using ClosedXML library in fastest way (from performance point of view) add values from DataTable to already existing Excel worksheet?
NOTE: There is way to create new worksheet with DataTable parameter, but the main issue is in adding values to existing worksheet.
If you're dealing with millions of cells and you want to insert the data as fast as possible while consuming the minimum amount of memory then SAX is the way to go.
If you want ClosedXML to do the work for you then use:
cell.Value = dataTable;
or
cell.SetValue(dataTable);
or
cell.InsertData(dataTable);
or
cell.InsertTable(dataTable);
See the "Inserting Data/Tables" section of the Documentation
I would like to output a table to a webpage. The table is stored in an excel sheet (xls).
Is it possible to use xslt for this? The table is the cells are in this range:
A26 - P36 (16 columns and 11 rows)
If an exmaple file is need here is a link:
http://finans.opengate.dk/media/6704/2010-01-13.xls
Update: A daily file is uploaded. And I would like to automatically show a table from the latest xls-file using xslt. If some C# is needed to convert it from excel to something else (XML?) that is fine. It is done in the CMS Umbraco and that is why I hope to use XSLT since that is the way to show things in Umbraco, through xslt makroes.
BR. Anders
UPDATE with answer (based on answers below): No, it is not possible to read xls-files using xslt. If needed then one has to save excel sheet in another format xml or html. Or one will need a real programming language to read the excel file.
XSLT is mostly used to convert XML from one dialect to another, not to convert xls files to html.
If you just want to do this manually, you can save your worksheet as HTML directly in excel.
It is not clear from your question if you want to do this programmatically, and if so using what programming language.
You can use ADO.net to access cells in an excel file, similar to a DB query. This is a bit lighter than trying to use Excel automation objects.
http://support.microsoft.com/kb/316934
SpreadsheetGear for .NET can read Excel files and display them in a DataGrid as shown in the Excel to DataGrid sample on this page:
// Create a workbook from an Excel file
String ssFile = Server.MapPath("files/spiceorder.xls");
SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook(ssFile);
// Get a DataSet from an existing defined name
DataSet dataSet = workbook.GetDataSet("orderrange", SpreadsheetGear.Data.GetDataFlags.FormattedText);
// Bind a DataGrid to the DataSet
DataGrid1.DataSource = dataSet;
DataGrid1.DataBind();
SpreadsheetGear can also render png/gif/jpg images from cell ranges or charts as demonstrated here.
You can download the free trial here if you want to try it yourself.
Disclaimer: I own SpreadsheetGear LLC