我发现NPOI非常适合用C#编写Excel文件.
但我想在C#中打开,阅读和修改Excel文件.
我怎样才能做到这一点?
我正在使用NPOI将DataTable转换为ASP.NET Web API项目中的Excel.
但我从回应中得不到任何东西.这是我的代码:
public HttpResponseMessage GetExcelFromDataTable(DataTable dt)
{
IWorkbook workbook = new XSSFWorkbook(); // create *.xlsx file, use HSSFWorkbook() for creating *.xls file.
ISheet sheet1 = workbook.CreateSheet();
IRow row1 = sheet1.CreateRow(0);
for (int i = 0; dt.Columns.Count > i; i++)
{
row1.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
}
for (int i = 0; dt.Rows.Count > i; i++)
{
IRow row = sheet1.CreateRow(i + 1);
for (int j = 0; dt.Columns.Count > j; j++)
{
row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
}
}
MemoryStream ms = new MemoryStream(); …
Run Code Online (Sandbox Code Playgroud) 我正在使用NPOI从Asp.Net MVC应用程序输出excel并且与纯文本一起工作得非常好但是现在已经被要求添加格式并且我遇到问题我需要有一个单元格,粗体文本后跟非粗体文本.例如
这个文字粗体 - 这个文字正常
我知道我可以给单元格一个单一的样式,但这无济于事我无论如何都看不到为单元格提供一些预先格式化的富文本.
我能想到的唯一可能的解决方案是分别创建两个单元格并将它们合并在一起,但这是否意味着格式化将会丢失?
我有没有办法在NPOI中错过这个?
NPOI是Java POI项目的.NET端口,允许用户读取和写入Microsoft Excel文档(以及其他Office格式).NPOI 1.2.2引入了对"自动调整大小"列的支持,其中列设置为列中最宽单元格条目的宽度.但是,有许多报道说这不起作用.那有可能吗?
当我使用NPOI读取Excel工作表时,将跳过空单元格.例如,它包含行A, B, , C
,我使用它读取它
IRow row = sheet.GetRow(rowNb)
Run Code Online (Sandbox Code Playgroud)
然后row.Cells[1].ToString()
将输出B
(按预期)但row.Cells[2].ToString()
输出C
而不是空字符串.有没有办法保持空单元格?谢谢.
编辑:
我正在尝试编写一个小型控制台应用程序,它将从excel电子表格中读取行,解析行并将现场数据写入新的excel文件.我正在使用.NET和NPOI库.我终于在apache网站上挖掘了POI的Java文档.这是我更新的代码,包含新错误.
这实际上创建了一个可读文件,除了它只将文本写入第三列.
public static void TransferXLToTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("City", typeof(string));
dt.Columns.Add("State", typeof(string));
dt.Columns.Add("Zip", typeof(string));
using (FileStream stream = new FileStream(OpenFile(), FileMode.Open, FileAccess.Read))
{
IWorkbook wb = new XSSFWorkbook(stream);
ISheet sheet = wb.GetSheet("Sheet1");
string holder;
int i = 0;
do
{
DataRow dr = dt.NewRow();
IRow row = sheet.GetRow(i);
try
{
holder = row.GetCell(0, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();
}
catch (Exception)
{
break;
}
string city = holder.Substring(0, holder.IndexOf(','));
string state = holder.Substring(holder.IndexOf(',') + 2, 2);
string zip = …
Run Code Online (Sandbox Code Playgroud) using NPOI.XSSF.UserModel;
using NPOI.XSSF.Model;
using NPOI.HSSF.UserModel;
using NPOI.HSSF.Model;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
(...)
XSSFWorkbook hssfwb;
using (FileStream file = new FileStream(@"D:\VB\XLSX teste com NPOI\XLSX 1\Book1.xlsx",
FileMode.Open, FileAccess.Read))
{
hssfwb = new XSSFWorkbook(file);
file.Close();
}
ISheet sheet = hssfwb.GetSheetAt(0);
IRow row = sheet.GetRow(0);
ICell cell = row.CreateCell(5);
cell.SetCellValue("test");
cell.CellStyle.FillBackgroundColor = IndexedColors.BrightGreen.Index;
cell.CellStyle.FillPattern = FillPattern.SolidForeground;
using (FileStream file = new FileStream(@"D:\VB\XLSX teste com NPOI\XLSX 1\Book1ee22.xlsx",
FileMode.Create, FileAccess.Write))
{
hssfwb.Write(file);
file.Close();
}
Run Code Online (Sandbox Code Playgroud)
NPOI的版本:2.1.3.1我有这个代码,它正在改变孔板的颜色,而不仅仅是单元......改变单元填充颜色的正确方法是什么?
以下是工作代码,基于下面标记为正确的答案:
XSSFWorkbook hssfwb;
using (FileStream file = new FileStream(@"D:\Copy D\Tech\VB\XLSX …
Run Code Online (Sandbox Code Playgroud) 我想使用NPOI读取Excel Tables 2010 xlsx,然后将数据导出到DataTables但不知道如何使用它.任何人都可以一步一步地告诉我如何将Excel导出到Datatable?我已经下载了NPOI.dll,添加到参考但不知道还有什么...
是的,Koogra只读.EPPlus仅支持.xlsx并且在边缘情况下是错误的.
我目前正在使用NPOI根据我的asp.net mvc应用程序中的数据库生成Excel文件.我几乎完成了代码,除了在尝试将日期写入Excel时我一直得到的一个小问题.
在数据库(MS SQL Server)中,我将日期保存为41883,41913等...在C#中我可以使用它转换为DataTime对象
DateTime dt = DateTime.FromOADate(Convert.ToDouble(41883));
Run Code Online (Sandbox Code Playgroud)
我用来写日期到Excel的代码看起来像这样:
var cell = excelRow.CreateCell(columnIndex);
IDataFormat format = workbook.CreateDataFormat();
short dateFormat = format.GetFormat("dd/MM/yyyy");
cell.SetCellValue(DateTime.FromOADate(Convert.ToDouble(dbDateValue)));
ICellStyle cellStyle = workbook.CreateCellStyle();
cellStyle.DataFormat = dateFormat;
cell.CellStyle = cellStyle;
Run Code Online (Sandbox Code Playgroud)
这只是我的代码示例(正在编写日期的部分).这段代码的问题是只有部分日期单元格实际上被格式化为日期,对于所有其他日程单元格我仍然看到数据库41883,41913等中的值当然我可以选择并应用短日期/从Excel格式化日期(但我不希望如此).
任何人都可以让我知道为什么会出现这样的行为(格式化仅适用于部分单元格)...我甚至尝试使用HSSFDataFormat.GetBuiltinFormat("Date"),但在这种情况下没有格式化单元格.
上面的图片更好地解释了我的问题...当我选择第一列中的第一个单元格时,我看到单元格被格式化为"自定义"...对于所有其他未格式化的值,它是常规.一旦我选择了单元格,我可以将其格式化为Excel中的日期,没有任何问题.这很奇怪,因为对所有日期单元执行相同的代码,但只有一些得到正确的格式...