845 lines
34 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using DocumentFormat.OpenXml.Packaging;
using Ap = DocumentFormat.OpenXml.ExtendedProperties;
using Vt = DocumentFormat.OpenXml.VariantTypes;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Spreadsheet;
using A = DocumentFormat.OpenXml.Drawing;
using System.Security.Cryptography;
namespace IronIntel.Contractor
{
internal class ExcelXlsx
{
public ExcelXlsx() { }
private Dictionary<string, UInt32Value> _fontIndexCache = new Dictionary<string, UInt32Value>();
private Dictionary<string, UInt32Value> _fillIndexCache = new Dictionary<string, UInt32Value>();
private Dictionary<string, UInt32Value> _borderIndexCache = new Dictionary<string, UInt32Value>();
private Dictionary<string, UInt32Value> _formatIndexCache = new Dictionary<string, UInt32Value>();
// Creates a SpreadsheetDocument.
public void CreatePackage(MemoryStream ms, COpenXmlExcelSheet edata)
{
using (SpreadsheetDocument package = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook))
{
CExcelSheet excelSheetData = ConvertData(edata);
CreateParts(package, excelSheetData);
}
}
private CExcelSheet ConvertData(COpenXmlExcelSheet openXmlData)
{
CExcelSheet excelSheetData = new CExcelSheet();
//保存每列宽度。
foreach (double width in openXmlData.WidthList)
{
excelSheetData.WidthList.Add(width);
}
//保存每行高度。
foreach (KeyValuePair<int, double> kvp in openXmlData.RowHeightList)
{
excelSheetData.RowHeightList.Add(kvp.Key, kvp.Value);
}
CExcelCellData excellData = null;
//生成特定样式数据并生成shared strings列表合并单元格列表。
int orderIndex = 0;
foreach (List<IOpenXmlExcelStyleAndData> rowData in openXmlData.DataMatrix)
{
List<CExcelCellData> excelRowData = new List<CExcelCellData>();
foreach (IOpenXmlExcelStyleAndData cellData in rowData)
{
excellData = new CExcelCellData();
excelRowData.Add(excellData);
excellData.ApplyNumberFormat = DocumentFormat.OpenXml.BooleanValue.FromBoolean(true);
excellData.CAlignment = cellData.CAlignment;
excellData.CBorder = cellData.CBorder;
excellData.CFill = cellData.CFill;
excellData.CFont = cellData.CFont;
if (cellData.FormatType == CellFormatType.CSharp)
{
bool b = false;
if (cellData.FormatCode != null && cellData.FormatCode.Contains("{0:MMM-yyyy}"))
{
b = true;
}
excellData.FormatCode = ConvertFormat.ConvertFormatFromCSharpToExcel(cellData.FormatCode, cellData.DataType);
if (cellData.DataType == CellDataType.String || cellData.DataType == CellDataType.Integer)
{
if (b)
{
if (cellData.Value != null && cellData.Value.ToString().Length != 6)
{
excellData.FormatCode = "";
}
}
}
}
if (string.IsNullOrEmpty(excellData.FormatCode))
{
excellData.Value = orderIndex;
orderIndex++;
excelSheetData.SharedStrings.Add(cellData.Value == null ? "" : cellData.Value.ToString());
excellData.DataType = CellValues.SharedString;
excellData.FormatCode = "";
excellData.NumberFormatId = 49U;
}
else
{
switch (cellData.DataType)
{
case CellDataType.Bool:
try
{
int v = 0;// Convert.ToInt16(cellData.Value);
if (cellData.Value == null || cellData.Value.ToString() == "0" ||
string.Equals(cellData.Value.ToString(), "false", StringComparison.OrdinalIgnoreCase))
{
v = 0;
}
else
{
v = 1;
}
excellData.Value = v;
excellData.DataType = CellValues.Number;
}
catch { }
break;
case CellDataType.Date:
try
{
excellData.Value = Convert.ToDateTime(cellData.Value).ToOADate();
excellData.DataType = CellValues.Number;
}
catch { }
break;
case CellDataType.Float:
case CellDataType.Integer:
excellData.Value = cellData.Value;
excellData.DataType = CellValues.Number;
break;
default:
//excellData.Value = orderIndex;
//orderIndex++;
//excelSheetData.SharedStrings.Add(cellData.Value == null ? "" : cellData.Value.ToString());
//excellData.DataType = CellValues.SharedString;
excellData.Value = (cellData.Value == null ? "" : cellData.Value.ToString());
excellData.DataType = CellValues.String;
excellData.FormatCode = "";
excellData.NumberFormatId = 49U;
break;
}
}
#region
if (!string.IsNullOrEmpty(cellData.MergedCellsPosition))
{
excelSheetData.MergeCellReferenceList.Add(cellData.MergedCellsPosition);
}
#endregion
}
excelSheetData.DataMatrix.Add(excelRowData);
}
return excelSheetData;
}
// Adds child parts and generates content of the specified part.
private void CreateParts(SpreadsheetDocument document, CExcelSheet excelSheetData)
{
WorkbookPart workbookPart = document.AddWorkbookPart();
GenerateWorkbookPart1Content(workbookPart);
WorkbookStylesPart workbookStylesPart = workbookPart.AddNewPart<WorkbookStylesPart>("rId3");
GenerateWorkbookStylesPart1Content(workbookStylesPart);
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>("rId1");
GenerateWorksheetPart1Content(worksheetPart);
#region columns
Columns columns = GenerateColumns(excelSheetData.WidthList);
worksheetPart.Worksheet.Append(columns);
#endregion
#region sheet data
SheetData sheetData = GenerateSheetData(workbookStylesPart.Stylesheet, excelSheetData);
worksheetPart.Worksheet.Append(sheetData);
#endregion
#region sheet merge cells
if (excelSheetData.MergeCellReferenceList.Count > 0)
{
MergeCells mergeCells = GenerateMergeCell(excelSheetData.MergeCellReferenceList);
worksheetPart.Worksheet.Append(mergeCells);
}
#endregion
#region sheet shared strings
if (excelSheetData.SharedStrings.Count > 0)
{
SharedStringTablePart sharedStringTablePart = workbookPart.AddNewPart<SharedStringTablePart>("rId4");
GenerateSharedStringTablePart1Content(sharedStringTablePart, excelSheetData.SharedStrings);
}
#endregion
}
// Generates content of workbookPart1.
private void GenerateWorkbookPart1Content(WorkbookPart workbookPart1)
{
Workbook workbook1 = new Workbook();
workbook1.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
FileVersion fileVersion1 = new FileVersion() { ApplicationName = "xl", LastEdited = "4", LowestEdited = "4", BuildVersion = "4505" };
WorkbookProperties workbookProperties1 = new WorkbookProperties() { DefaultThemeVersion = (UInt32Value)124226U };
BookViews bookViews1 = new BookViews();
WorkbookView workbookView1 = new WorkbookView() { XWindow = 120, YWindow = 120, WindowWidth = (UInt32Value)21495U, WindowHeight = (UInt32Value)9570U };
bookViews1.Append(workbookView1);
Sheets sheets1 = new Sheets();
Sheet sheet1 = new Sheet() { Name = "Sheet1", SheetId = (UInt32Value)1U, Id = "rId1" };
sheets1.Append(sheet1);
CalculationProperties calculationProperties1 = new CalculationProperties() { CalculationId = (UInt32Value)125725U };
FileRecoveryProperties fileRecoveryProperties1 = new FileRecoveryProperties() { RepairLoad = true };
workbook1.Append(fileVersion1);
workbook1.Append(workbookProperties1);
workbook1.Append(bookViews1);
workbook1.Append(sheets1);
workbook1.Append(calculationProperties1);
workbook1.Append(fileRecoveryProperties1);
workbookPart1.Workbook = workbook1;
}
// Generates content of worksheetPart1.
private void GenerateWorksheetPart1Content(WorksheetPart worksheetPart1)
{
Worksheet worksheet1 = new Worksheet();
worksheet1.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");
#region sheet dimension
//SheetDimension sheetDimension1 = new SheetDimension();// { Reference = "A1:H3" };
//worksheet1.Append(sheetDimension1);
#endregion
#region sheet views
SheetViews sheetViews1 = new SheetViews();
SheetView sheetView1 = new SheetView() { TabSelected = true, WorkbookViewId = (UInt32Value)0U };
Selection selection1 = new Selection() { ActiveCell = "A1", SequenceOfReferences = new ListValue<StringValue>() { InnerText = "A1" } };
sheetView1.Append(selection1);
sheetViews1.Append(sheetView1);
worksheet1.Append(sheetViews1);
#endregion
#region sheet format properties
SheetFormatProperties sheetFormatProperties1 = new SheetFormatProperties() { DefaultRowHeight = 18D, CustomHeight = true };
worksheet1.Append(sheetFormatProperties1);
#endregion
#region columns
//Columns columns = GenerateColumns(widthList);
//worksheet1.Append(columns);
#endregion
#region sheet data
//SheetData sheetData = GenerateSheetData();
//worksheet1.Append(sheetData);
#endregion
#region merge cells
#endregion
//PhoneticProperties phoneticProperties1 = new PhoneticProperties() { FontId = (UInt32Value)1U, Type = PhoneticValues.NoConversion };
//PageMargins pageMargins1 = new PageMargins() { Left = 0.7D, Right = 0.7D, Top = 0.75D, Bottom = 0.75D, Header = 0.3D, Footer = 0.3D };
//PageSetup pageSetup1 = new PageSetup() { PaperSize = (UInt32Value)9U, Orientation = OrientationValues.Portrait, HorizontalDpi = (UInt32Value)200U, VerticalDpi = (UInt32Value)200U };
//worksheet1.Append(phoneticProperties1);
//worksheet1.Append(pageMargins1);
//worksheet1.Append(pageSetup1);
worksheetPart1.Worksheet = worksheet1;
}
private Columns GenerateColumns(List<DoubleValue> columnProperties)
{
Columns columns = new Columns();
Column column = null;
UInt32Value col = 0;
double gain = 127.0 / 750.0;
foreach (DoubleValue dv in columnProperties)
{
col++;
column = new Column() { Min = col, Max = col, Width = dv * gain, CustomWidth = true, BestFit = true };
columns.Append(column);
}
return columns;
}
private Row GenerateRow(int rowIndex, List<Cell> cellsInRow, int styleIndex)
{
if (rowIndex < 0) return null;
Row row = new Row() { RowIndex = (UInt32)rowIndex };
if (styleIndex >= 0)
{
row.StyleIndex = (UInt32)styleIndex;
}
if (cellsInRow.Count > 0)
{
row.Spans = new ListValue<StringValue>() { InnerText = "1:" + cellsInRow.Count };
}
foreach (Cell cell in cellsInRow)
{
row.Append(cell);
}
return row;
}
private Cell GenerateCell(Stylesheet styleSheet, CExcelCellData cellData)
{
Cell cell = new Cell();
CellValue cellValue = new CellValue();
if (styleSheet == null)
{
cell.DataType = CellValues.String;
cellValue.Text = cellData.Value == null ? "" : cellData.Value.ToString();
cell.Append(cellValue);
return cell;
}
UInt32Value fontId = CreateFonts(styleSheet, cellData.CFont);
UInt32Value fillId = CreateFills(styleSheet, cellData.CFill);
UInt32Value borderId = CreateBorders(styleSheet, cellData.CBorder);
cell.StyleIndex = CreateCellFormat(styleSheet, fontId, fillId, borderId, cellData);
if (cellData.DataType != null && cellData.DataType.HasValue)
{
cell.DataType = cellData.DataType;
}
cellValue.Text = cellData.Value == null ? "" : cellData.Value.ToString();
cell.Append(cellValue);
return cell;
}
private string GetFontsHashString(CellFont cellFont)
{
StringBuilder sb = new StringBuilder();
if (cellFont != null)
{
sb.AppendLine(string.IsNullOrEmpty(cellFont.FontName) ? "" : cellFont.FontName);
if (cellFont.FontSize != null && cellFont.FontSize.HasValue)
{
sb.AppendLine(cellFont.FontSize.Value.ToString());
}
if (cellFont.ForeColor != null)
{
sb.AppendLine(cellFont.ForeColor.ToArgb().ToString());
}
if (cellFont.IsBold != null && cellFont.IsBold.HasValue)
{
sb.AppendLine(cellFont.IsBold.Value.ToString());
}
}
string result = GetHashString(sb.ToString());
return result;
}
private string GetFillHashString(CellFill fill)
{
StringBuilder sb = new StringBuilder();
if (fill != null)
{
if (fill.FillColor != null)
{
sb.AppendLine(fill.FillColor.ToArgb().ToString());
}
}
string result = GetHashString(sb.ToString());
return result;
}
private string GetBorderHashString(CellBorder border)
{
StringBuilder sb = new StringBuilder();
if (border != null)
{
if (border.LeftBorder != null)
sb.AppendLine("left");
if (border.RightBorder != null)
sb.AppendLine("right");
if (border.TopBorder != null)
sb.AppendLine("top");
if (border.BottomBorder != null)
sb.AppendLine("bottom");
if (border.DialogalBorder != null)
sb.AppendLine("dialogal");
}
string result = GetHashString(sb.ToString());
return result;
}
private string GetFormatHashString(CellFormat cellFormat, string formateCode)
{
StringBuilder sb = new StringBuilder();
if (cellFormat != null)
{
if (cellFormat.FontId != null && cellFormat.FontId.HasValue)
sb.AppendLine(cellFormat.FontId.Value.ToString());
if (cellFormat.ApplyFont != null && cellFormat.ApplyFont.HasValue)
sb.AppendLine(cellFormat.ApplyFont.Value.ToString());
if (cellFormat.FillId != null && cellFormat.FillId.HasValue)
sb.AppendLine(cellFormat.FillId.Value.ToString());
if (cellFormat.ApplyFill != null && cellFormat.ApplyFill.HasValue)
sb.AppendLine(cellFormat.ApplyFill.Value.ToString());
if (cellFormat.BorderId != null && cellFormat.BorderId.HasValue)
sb.AppendLine(cellFormat.BorderId.Value.ToString());
if (cellFormat.ApplyBorder != null && cellFormat.ApplyBorder.HasValue)
sb.AppendLine(cellFormat.ApplyBorder.Value.ToString());
if (cellFormat.ApplyNumberFormat != null && cellFormat.ApplyNumberFormat.HasValue)
sb.AppendLine(cellFormat.ApplyNumberFormat.Value.ToString());
if (cellFormat.NumberFormatId != null && cellFormat.NumberFormatId.HasValue)
sb.AppendLine(cellFormat.NumberFormatId.Value.ToString());
if (cellFormat.Alignment != null)
{
if (cellFormat.Alignment.Horizontal != null && cellFormat.Alignment.Horizontal.HasValue)
sb.AppendLine(cellFormat.Alignment.Horizontal.Value.ToString());
if (cellFormat.Alignment.Vertical != null && cellFormat.Alignment.Vertical.HasValue)
sb.AppendLine(cellFormat.Alignment.Vertical.Value.ToString());
if (cellFormat.ApplyAlignment != null && cellFormat.ApplyAlignment.HasValue)
sb.AppendLine(cellFormat.ApplyAlignment.Value.ToString());
}
}
sb.AppendLine(formateCode);
string result = GetHashString(sb.ToString());
return result;
}
private string GetHashString(string str)
{
return str;
byte[] b1 = Encoding.UTF8.GetBytes(str);
//Cryptography.HashCode hc = new LHBIS.Security.Cryptography.HashCode(LHBIS.Security.Cryptography.HashType.htSHA256);
//byte[] b2 = hc.ComputeHash(b1);
//string result = LHBIS.Security.Cryptography.CommonConvert.ToHex(b2);
//return result;
HashAlgorithm ha = new SHA256Managed();
byte[] b2 = ha.ComputeHash(b1);
string result = ToHex(b2);
return result;
}
private static string ToHex(byte[] buffer)
{
if (buffer == null)
return "";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < buffer.Length; i++)
{
sb.Append(string.Format("{0:X2}", buffer[i]));
}
return sb.ToString();
}
private SheetData GenerateSheetData(Stylesheet styleSheet, CExcelSheet data)
{
SheetData sheetData = new SheetData();
Row row = null;
Cell cell = null;
List<Cell> cellList = null;
int rowIndex = 0;
foreach (List<CExcelCellData> rowData in data.DataMatrix)
{
rowIndex += 1;
cellList = new List<Cell>();
foreach (CExcelCellData cellData in rowData)
{
//no style while stylesheet is null
cell = GenerateCell(styleSheet, cellData);
cellList.Add(cell);
}
//初始化行的样式为-1表示使用缺省样式。
row = GenerateRow(rowIndex, cellList, -1);
if (data.RowHeightList.ContainsKey(rowIndex))
{
row.CustomHeight = new BooleanValue(true);
row.Height = new DoubleValue(data.RowHeightList[rowIndex]);
}
sheetData.Append(row);
}
return sheetData;
}
private UInt32Value CreateFonts(Stylesheet styleSheet, CellFont cellFont)
{
if (styleSheet == null || cellFont == null) return 0U;
string key = GetFontsHashString(cellFont);
UInt32Value ui32 = 0;
if (_fontIndexCache.TryGetValue(key, out ui32))
{
return ui32;
}
Font font = new Font();
if (!string.IsNullOrEmpty(cellFont.FontName))
{
FontName name = new FontName() { Val = cellFont.FontName };
font.Append(name);
}
if (cellFont.FontSize != null && cellFont.FontSize.HasValue)
{
FontSize size = new FontSize() { Val = cellFont.FontSize.Value };
font.Append(size);
}
if (cellFont.IsBold != null && cellFont.IsBold.Value)
{
Bold bold = new Bold();
font.Append(bold);
}
if (cellFont.ForeColor != null)
{
Color color = new Color();
color.Rgb = new HexBinaryValue();
color.Rgb.Value = System.Drawing.ColorTranslator.ToHtml(
System.Drawing.Color.FromArgb(cellFont.ForeColor.A, cellFont.ForeColor.R, cellFont.ForeColor.G, cellFont.ForeColor.B)).Replace("#", "");
font.Append(color);
}
FontFamilyNumbering fontFamilyNumbering = new FontFamilyNumbering() { Val = 2 };
font.Append(fontFamilyNumbering);
FontCharSet fontCharSet = new FontCharSet() { Val = 134 };
font.Append(fontCharSet);
FontScheme fontScheme = new FontScheme() { Val = FontSchemeValues.Minor };
font.Append(fontScheme);
if (styleSheet.Fonts == null)
{
styleSheet.Fonts = new Fonts();
}
styleSheet.Fonts.Append(font);
UInt32Value fontID = styleSheet.Fonts.Count;
_fontIndexCache.Add(key, fontID);
styleSheet.Fonts.Count++;
return fontID;
}
private UInt32Value CreateFills(Stylesheet styleSheet, CellFill cellFill)
{
if (styleSheet == null || cellFill == null) return 0U;
string key = GetFillHashString(cellFill);
UInt32Value ui32 = 0;
if (_fillIndexCache.TryGetValue(key, out ui32))
{
return ui32;
}
PatternFill patternFill = new PatternFill();
if (cellFill != null)
{
patternFill.Append(new ForegroundColor()
{
Rgb = new HexBinaryValue()
{
Value = System.Drawing.ColorTranslator.ToHtml(
System.Drawing.Color.FromArgb(cellFill.FillColor.A, cellFill.FillColor.R, cellFill.FillColor.G, cellFill.FillColor.B)).Replace("#", "")
}
});
patternFill.PatternType = PatternValues.Solid;
}
else
{
patternFill.PatternType = PatternValues.None;
}
if (styleSheet.Fills == null)
{
styleSheet.Fills = new Fills();
}
styleSheet.Fills.Append(new Fill(patternFill));
UInt32Value fillId = styleSheet.Fills.Count;
_fillIndexCache.Add(key, fillId);
styleSheet.Fills.Count++;
return fillId;
}
private UInt32Value CreateBorders(Stylesheet styleSheet, CellBorder cellBorder)
{
if (styleSheet == null || cellBorder == null) return 0U;
string key = GetBorderHashString(cellBorder);
UInt32Value ui32 = 0;
if (_borderIndexCache.TryGetValue(key, out ui32))
{
return ui32;
}
Border border = new Border();
if (cellBorder == null) return 0;
if (cellBorder.LeftBorder != null)
border.Append(cellBorder.LeftBorder);
if (cellBorder.RightBorder != null)
border.Append(cellBorder.RightBorder);
if (cellBorder.TopBorder != null)
border.Append(cellBorder.TopBorder);
if (cellBorder.BottomBorder != null)
border.Append(cellBorder.BottomBorder);
if (cellBorder.DialogalBorder != null)
border.Append(cellBorder.DialogalBorder);
if (styleSheet.Borders == null)
{
styleSheet.Borders = new Borders();
}
styleSheet.Borders.Append(border);
UInt32Value borderId = styleSheet.Borders.Count;
_borderIndexCache.Add(key, borderId);
styleSheet.Borders.Count++;
return borderId;
}
private UInt32Value CreateCellFormat(Stylesheet styleSheet, UInt32Value fontIndex, UInt32Value fillIndex,
UInt32Value borderIndex, CExcelCellData cellData)
{
if (styleSheet == null) return 0U;
CellFormat cellFormat = new CellFormat();
if (fontIndex == null) fontIndex = 0;
cellFormat.FontId = fontIndex;
cellFormat.ApplyFont = BooleanValue.FromBoolean(true);
if (fillIndex == null) fillIndex = 0;
cellFormat.FillId = fillIndex;
cellFormat.ApplyFill = BooleanValue.FromBoolean(true);
if (borderIndex == null) borderIndex = 0;
cellFormat.BorderId = borderIndex;
cellFormat.ApplyBorder = BooleanValue.FromBoolean(true);
cellFormat.ApplyNumberFormat = cellData.ApplyNumberFormat;
cellFormat.NumberFormatId = cellData.NumberFormatId;
if (cellData.CAlignment != null)
{
cellFormat.Append(cellData.CAlignment.Align);
cellFormat.ApplyAlignment = BooleanValue.FromBoolean(true);
}
string key = GetFormatHashString(cellFormat, cellData.FormatCode);
UInt32Value ui32 = 0;
if (_formatIndexCache.TryGetValue(key, out ui32))
{
return ui32;
}
if (!string.IsNullOrEmpty(cellData.FormatCode) && cellData.FormatCode.HasValue)
{
cellFormat.NumberFormatId = CreateFormatId(cellData.FormatCode, styleSheet.NumberingFormats);
}
styleSheet.CellFormats.Append(cellFormat);
UInt32Value cellFormatId = styleSheet.CellFormats.Count;
_formatIndexCache.Add(key, cellFormatId);
styleSheet.CellFormats.Count++;
return cellFormatId;
}
private UInt32Value CreateFormatId(string formatCode, NumberingFormats numberingFormats)
{
NumberingFormat nf = numberingFormats.AppendChild(new NumberingFormat());
numberingFormats.Count++;
nf.FormatCode = formatCode;
nf.NumberFormatId = GetMaxFormatId(numberingFormats);
if (nf.NumberFormatId == 0)
{
nf.NumberFormatId = 176U;
}
else
{
nf.NumberFormatId += 1;
}
return nf.NumberFormatId;
}
private UInt32Value GetMaxFormatId(NumberingFormats numberingFormats)
{
UInt32Value maxFormatId = 0U;
foreach (NumberingFormat nf in numberingFormats.ChildElements)
{
if (nf.NumberFormatId != null && nf.NumberFormatId.HasValue && nf.NumberFormatId > maxFormatId)
maxFormatId = nf.NumberFormatId;
}
return maxFormatId;
}
// Generates content of workbookStylesPart1.
private void GenerateWorkbookStylesPart1Content(WorkbookStylesPart workbookStylesPart1)
{
Stylesheet stylesheet = new Stylesheet();
#region default fonts
Font font = new Font();
FontSize fontSize = new FontSize() { Val = 11D };
Color color = new Color() { Theme = (UInt32Value)1U };
FontName fontName = new FontName() { Val = "宋体" };
FontFamilyNumbering fontFamilyNumbering = new FontFamilyNumbering() { Val = 2 };
FontCharSet fontCharSet = new FontCharSet() { Val = 134 };
FontScheme fontScheme = new FontScheme() { Val = FontSchemeValues.Minor };
font.Append(fontSize);
font.Append(color);
font.Append(fontName);
font.Append(fontFamilyNumbering);
font.Append(fontCharSet);
font.Append(fontScheme);
if (stylesheet.Fonts == null) stylesheet.Fonts = new Fonts() { Count = 2 };
stylesheet.Fonts.Append(font);
Font font2 = new Font();
FontSize fontSize2 = new FontSize() { Val = 9D };
FontName fontName2 = new FontName() { Val = "宋体" };
FontFamilyNumbering fontFamilyNumbering2 = new FontFamilyNumbering() { Val = 2 };
FontCharSet fontCharSet2 = new FontCharSet() { Val = 134 };
FontScheme fontScheme2 = new FontScheme() { Val = FontSchemeValues.Minor };
font2.Append(fontSize2);
font2.Append(fontName2);
font2.Append(fontFamilyNumbering2);
font2.Append(fontCharSet2);
font2.Append(fontScheme2);
stylesheet.Fonts.Append(font2);
#endregion
#region default fills
Fill fill = new Fill();
PatternFill patternFill = new PatternFill() { PatternType = PatternValues.None };
fill.Append(patternFill);
if (stylesheet.Fills == null) stylesheet.Fills = new Fills() { Count = 2 };
stylesheet.Fills.Append(fill);
Fill fill2 = new Fill();
PatternFill patternFill2 = new PatternFill() { PatternType = PatternValues.Gray125 };
fill2.Append(patternFill2);
stylesheet.Fills.Append(fill2);
#endregion
#region default border
Border border = new Border();
LeftBorder leftBorder = new LeftBorder();
RightBorder rightBorder = new RightBorder();
TopBorder topBorder = new TopBorder();
BottomBorder bottomBorder = new BottomBorder();
DiagonalBorder diagonalBorder = new DiagonalBorder();
border.Append(leftBorder);
border.Append(rightBorder);
border.Append(topBorder);
border.Append(bottomBorder);
border.Append(diagonalBorder);
if (stylesheet.Borders == null) stylesheet.Borders = new Borders() { Count = 1 };
stylesheet.Borders.Append(border);
#endregion
#region cell style format
#endregion
#region cell numberingformats
stylesheet.NumberingFormats = new NumberingFormats() { Count = (UInt32Value)0U };
#endregion
#region cell format cell formatcellXfs的索引须从1开始
stylesheet.CellFormats = new CellFormats() { Count = 1U };
CellFormat cf0 = stylesheet.CellFormats.AppendChild(new CellFormat());
cf0.NumberFormatId = 0;
cf0.FontId = 0;
cf0.BorderId = 0;
cf0.FillId = 0;
#endregion
#region cell style
#endregion
workbookStylesPart1.Stylesheet = stylesheet;
}
// Generates content of sharedStringTablePart1.
private void GenerateSharedStringTablePart1Content(SharedStringTablePart sharedStringTablePart1, List<string> cellValues)
{
SharedStringTable sharedStringTable = new SharedStringTable() { Count = UInt32Value.FromUInt32((uint)cellValues.Count), UniqueCount = UInt32Value.FromUInt32((uint)cellValues.Count) };
SharedStringItem sharedStringItem = null;// new SharedStringItem();
Text text = null;// new Text();
foreach (string str in cellValues)
{
sharedStringItem = new SharedStringItem();
text = new Text();
text.Text = str;
sharedStringItem.Append(text);
sharedStringTable.Append(sharedStringItem);
}
sharedStringTablePart1.SharedStringTable = sharedStringTable;
}
private MergeCells GenerateMergeCell(List<string> mergeCellReferenceList)
{
MergeCells mcells = new MergeCells() { Count = UInt32Value.FromUInt32((uint)mergeCellReferenceList.Count) };
if (mcells == null || mergeCellReferenceList == null || mergeCellReferenceList.Count <= 0) return mcells;
var mergeCells = mergeCellReferenceList.Select((s) =>
{
return new MergeCell() { Reference = s };
});
foreach (var o in mergeCells)
{
mcells.Append(o);
}
return mcells;
}
}
}