- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我的代码:
public MemoryStream ExportDataTableToExcel(DataTable exportData, string sheetTitle = "Exported Data", bool includeColumnHeaders = true) {
uint excelRow = 1;
MemoryStream ms = new MemoryStream();
SpreadsheetDocument objSpreadsheet = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook);
WorkbookPart objWorkbookPart = objSpreadsheet.AddWorkbookPart();
var wsp = objSpreadsheet.WorkbookPart.WorkbookStylesPart;
if (wsp == null) {
//objSpreadsheet.WorkbookPart.DeletePart(wsp);
var stylesPart = objSpreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>();
stylesPart.Stylesheet = new Stylesheet();
CellFormat cf = new CellFormat {
NumberFormatId = 14,
FontId = 0,
FillId = 0,
BorderId = 0,
FormatId = 0,
ApplyNumberFormat = BooleanValue.FromBoolean(true)
};
stylesPart.Stylesheet.CellFormats = new CellFormats();
stylesPart.Stylesheet.CellFormats.AppendChild<CellFormat>(cf);
stylesPart.Stylesheet.CellFormats.Count = UInt32Value.FromUInt32((uint)stylesPart.Stylesheet.CellFormats.ChildElements.Count);
////ss.Save(stylesPart);
stylesPart.Stylesheet.Save();
}
objWorkbookPart.Workbook = new Workbook();
WorksheetPart objSheetPart = objWorkbookPart.AddNewPart<WorksheetPart>();
objSheetPart.Worksheet = new Worksheet(new SheetData());
Sheets objSheets = objSpreadsheet.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
Sheet objSheet = new Sheet();
objSheet.Id = objSpreadsheet.WorkbookPart.GetIdOfPart(objSheetPart);
objSheet.SheetId = 1;
objSheet.Name = sheetTitle;
objSheets.Append(objSheet);
if (includeColumnHeaders) {
for (int intCol = 0; intCol < exportData.Columns.Count; intCol++) {
string excelColumn = this.ConvertIndexToColumnValue(intCol + 1);
string headerText = Common.TextTransformations.CapitalizeWords(exportData.Columns[intCol].ColumnName.Replace("_", " "));
Cell objCell = InsertCellInWorksheet(excelColumn, excelRow, objSheetPart);
objCell.CellValue = new CellValue(headerText);
objCell.DataType = new EnumValue<CellValues>(CellValues.String);
}
excelRow++;
}
//Iterate through the row and column and add it to the cell
foreach(DataRow row in exportData.Rows) {
for (int intCol = 0; intCol < exportData.Columns.Count; intCol++) {
string excelColumn = this.ConvertIndexToColumnValue(intCol + 1);
Cell objCell = InsertCellInWorksheet(excelColumn, excelRow, objSheetPart);
if (exportData.Columns[intCol].DataType.ToString().Trim().ToLower() == "system.datetime") {
objCell.DataType = new EnumValue<CellValues>(CellValues.Number);
objCell.CellValue = new CellValue(((DateTime)row[intCol]).ToOADate().ToString());
objCell.StyleIndex = 0;
//
//objCell.StyleIndex = 5;
//objCell.CellReference = "A1";
}else{
objCell.CellValue = new CellValue(row[intCol].ToString());
objCell.DataType = new EnumValue<CellValues>(this.GetCellValueFromColumnType(exportData.Columns[intCol]));
}
}
excelRow++;
}
objSheetPart.Worksheet.Save();
objSpreadsheet.WorkbookPart.Workbook.Save();
objSpreadsheet.Close();
return ms;
}
问题是,生成 xlsx 后,当我尝试打开它时,它显示“Microsoft Excel 已停止工作”。我确信我的代码的 cellformat 部分是错误的,但我只是不知道如何更正它。
最佳答案
问题是您没有正确创建样式表。
要创建最简单的样式表,您需要包括字体、填充和边框。即使您不使用它们,它们也是强制性的。在您的代码中,尽管您使用了 FontId、FillId 和 BorderId 的索引,但您实际上并未定义它们。
// Where are these coming from ???
FontId = 0,
FillId = 0,
BorderId = 0,
说我提供了下面的代码片段,可以创建最简单的样式表,
WorkbookStylesPart stylesheet = spreadsheet.WorkbookPart.AddNewPart<WorkbookStylesPart>();
Stylesheet workbookstylesheet = new Stylesheet();
// <Fonts>
Font font0 = new Font(); // Default font : Id =0
/* An example for another font
Font font1 = new Font(); // Bold font
Bold bold = new Bold();
font1.Append(bold);
*/
Fonts fonts = new Fonts(); // <APENDING Fonts>
fonts.Append(font0);
//fonts.Append(font1); // <= Bold font
// <Fills>
Fill fill0 = new Fill(); // Default fill : Id = 0
Fills fills = new Fills(); // <APENDING Fills>
fills.Append(fill0);
// <Borders>
Border border0 = new Border(); // Defualt border : Id = 0
Borders borders = new Borders(); // <APENDING Borders>
borders.Append(border0);
// <CellFormats> : Now you can simple use above defined ID's
CellFormat cellformat0 = new CellFormat() { FormatId = 0, FillId = 0, BorderId = 0 };
// <APENDING CellFormats>
CellFormats cellformats = new CellFormats();
cellformats.Append(cellformat0);
// Append FONTS, FILLS , BORDERS & CellFormats to stylesheet <Preserve the ORDER>
workbookstylesheet.Append(fonts);
workbookstylesheet.Append(fills);
workbookstylesheet.Append(borders);
workbookstylesheet.Append(cellformats);
stylesheet.Stylesheet = workbookstylesheet;
stylesheet.Stylesheet.Save();
是的,它有点长,但只有一个时间代码,您将永远使用..
关于c# - 如何将 CellFormat 应用于单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28838802/
我写了几个命令来转换数据框,但我想将我写的代码简化为四个部分。第 1,2 和 3 部分用于计算第 1、2 和 3 列(计算每列重复值的次数,并完成 0 和三列最大值之间的缺失数)。第四部分是加入前面的
我试图理解应用于函数的类型参数。 我想在下面的方法中使用通用类型,但为了我的理解使用 String 和 Int。 当我如下定义一个函数时 def myfunc[Int](f:String => I
我有一个像下面这样的 DIV: // link to some js .js 在 div 中呈现最新的文章摘要。然而,它在 Calibri
我在 GridView 中有以下列,一列是日期,另一列是美元金额。我应用了格式并将 HtmlEncode 属性设置为 false,但值仍然未格式化: 这就是这些值在 GridView 中的显示方式
假设我已经定义了这些类型: data Km = Km Float deriving (Show, Eq) data Mile = Mile Float deriving (Show, Eq
我有一个关于 value in context 的小问题。 取 Just 'a',所以在这种情况下 Maybe 类型上下文中的值是 'a' 采用[3],因此在这种情况下,[a] 类型上下文中的值为3
require(quantmod) require(PerformanceAnalytics) getSymbols('INTC') x<- monthlyReturn(INTC) rollapply
我正在使用 VBA 对“已应用字轨更改”文档进行更改。 红色段落结束标记是插入段落结束标记。(打开“跟踪更改”> 将光标放在第一段末尾 > 按 Enter > 插入新段落内容 > 格式风格不同) 我需
考虑以下代码: class A{ my_method(const B& b){ import_something_from_c(this, b.getC()); // does some
我正在为自定义 Material 分配图像。分配的图像看起来有点像素化,类似于此图像 我已经将抗锯齿设置为 4 倍。我该如何解决这个问题? 最佳答案 尝试将 Material 的 mipFilter
我将样式应用于 元素和 元素。是否可以在 上使用样式元素应用于 似乎不遵循 CSS 特异性的通常规则。这是真的吗? 示例:http://jsfiddle.net/59dpy/ 尝试将所有背景色设为红
有没有办法将垂直虚线边框应用于 没有他们(边界)合并?我说的是附图上的东西——有 3 个 这里的元素,每个元素包含 2 的。如果我申请 border-right: 1px dashed black到
当我在 CSS 中对主体应用线性渐变时,如下所示 body { background: linear-gradient(#10416b, black); } 它不会将它应用到整个网页,而是将它应用到页
当我将边框和边框半径应用于 td 时,内半径是一个直 Angular ,根本不是圆的。 最佳答案 问题很可能是背景不透明的子元素会剪掉边框的内半径。 要解决此问题,您可以在 td 上应用 overfl
基本上,我有一个小的 SVG,它使用一个组来定义一个可重用的符号。该组包括我想在 CSS 中设置动画的路径。我面临的问题是只有“原始”元素应用了 CSS,“使用过”的元素没有。 .player_arr
宽度属性在这里不起作用: td { height: 50px; width: 25px; border: 1px
我想要一个函数(例如)在两种情况下输出 Map 的所有值: Map map1 = new HashMap(); Map map2 = new HashMap(); output(map1, "1234
我被要求将我们应用中的警报对话框的外观与应用主题使用的外观相匹配。 我设法将样式应用于应用程序中的所有警报对话框,并将其用作应用程序主题的一部分,但有些情况下样式应用不正确。 例如,当警报对话框包含“
我有一个 CGPath(由 UIBezierPath 创建),我想通过应用 CGAffineTransformScale 将其缩放到我想要的任何大小。 这会影响我的绘图质量(在转换为图像时)吗?如果不
您好,我已经在 vector 上使用了一些 STL 算法,例如 find_if、count_if、sort、push_back 等。现在我想为所有容器对象( vector 、列表、映射、集合)制作一个
我是一名优秀的程序员,十分优秀!