protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable reportTable = this.getReportTable(); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("本月数", 1, 6, 3, 0)); list.Add(ExcelHeader.Create("累计数", 1, 6, 9, 0)); list.Add(ExcelHeader.Create("目标成本", 2, 2, 3, 0)); list.Add(ExcelHeader.Create("实际成本", 2, 2, 5, 0)); list.Add(ExcelHeader.Create("目标成本 ", 2, 2, 9, 0)); list.Add(ExcelHeader.Create("实际成本 ", 2, 2, 11, 0)); foreach (DataColumn dataColumn in reportTable.Columns) { if ((dataColumn.Ordinal > 2 && dataColumn.Ordinal <= 6) || (dataColumn.Ordinal >= 9 && dataColumn.Ordinal <= 12)) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 3, 0, 0, 0)); } else { if (dataColumn.Ordinal <= 2) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 3, 0, 0, 3)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 3, 0, 0, 2)); } } } ExcelHelper.ExportExcel(reportTable, "目标成本执行情况分析", "目标成本执行情况分析", "目标成本执行情况分析.xls", list, null, 1, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable completedMonthlyReport = EReport.GetCompletedMonthlyReport(this.taskId, System.Convert.ToDateTime(this.date), this.hfldIsWBSRelevance.Value); DataTable dataTable = this.formatData(completedMonthlyReport, true); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("金额(元)", 1, 2, 5, 0)); list.Add(ExcelHeader.Create("上期末完成", 1, 2, 7, 0)); list.Add(ExcelHeader.Create("本期完成", 1, 2, 9, 0)); list.Add(ExcelHeader.Create("本期末完成", 1, 2, 11, 0)); System.Collections.Generic.List <int> list2 = new System.Collections.Generic.List <int>(); foreach (DataColumn dataColumn in dataTable.Columns) { if (dataColumn.Ordinal >= 4) { list2.Add(dataColumn.Ordinal); } if (dataColumn.Ordinal < 4) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } ExcelHelper.ExportExcel(dataTable, this.title, this.title, this.title + ".xls", list, null, 0, base.Request.Browser.Browser); }
protected String ToExcelJson(IList <FieldInfo> fields, Object data) { try { var sortedFields = fields .Where(field => { return(field.GetCustomAttribute(typeof(ExcelHeader)) as ExcelHeader != null); }) .OrderBy(field => { ExcelHeader header = field.GetCustomAttribute(typeof(ExcelHeader)) as ExcelHeader; return(header.ColumnIndex); }); this.buffer.Append("{"); foreach (var field in sortedFields) { ExcelHeader header = field.GetCustomAttribute(typeof(ExcelHeader)) as ExcelHeader; this.buffer.Append("\""); this.buffer.Append(header.HeaderName); this.buffer.Append("\":\""); this.buffer.Append(field.GetValue(data)); this.buffer.Append("\","); } this.buffer.Remove(buffer.Length - 1, 1); this.buffer.Append("}"); return(this.buffer.ToString()); } finally { this.buffer.Clear(); } }
public void init_data(string v_pmkey = "id", int v_row_begin = 3) { pm_index = new Dictionary <string, _PmLoc>(); for (int i = 0; i < _sheets.Count; i++) { Excel.Worksheet theSheet = _sheets[i].Sheet; ExcelHeader theHeader = _sheets[i].Header; //m_src_infos = new Dictionary<CellPoint, List<object>>(); Excel.Cells data = theSheet.Cells; int col = theHeader.get_col(v_pmkey); if (col < 0) { ZFDebug.Error(string.Format("{0}中没找到名为{1}的列", theSheet.Name, v_pmkey)); return; } for (int row = v_row_begin; row < 100000; row++) { object test_obj = data[row, col].Value; if (test_obj == null) { break; } if (!pm_index.ContainsKey(test_obj.ToString())) { pm_index.Add(test_obj.ToString(), new _PmLoc(row, i)); } } } }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable reportTable = this.getReportTable(); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("本月数", 1, 4, 2, 0)); list.Add(ExcelHeader.Create("累计数", 1, 4, 6, 0)); foreach (DataColumn dataColumn in reportTable.Columns) { if (dataColumn.Ordinal >= 2) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } } System.Collections.Generic.List <int> list2 = new System.Collections.Generic.List <int>(); list2.Add(2); list2.Add(3); list2.Add(6); list2.Add(7); ExcelHelper.ExportExcel(reportTable, "机械费分析表", "机械费分析表", "机械费分析表.xls", list, null, 2, base.Request.Browser.Browser); }
private static void renderHeader(ExcelWorksheet worksheet, ExcelHeader excelHeader, int maxHeaderLevel, int rowHeader1, ref int nCol) { if (excelHeader.Width != null) { worksheet.Column(nCol).Width = excelHeader.Width.Value; } ExcelRange excelRange = null; var colSpanSub = excelHeader.ColSpan(excelHeader); //var rowSpanSub = maxHeaderLevel - excelHeaders.Level; if (colSpanSub == 1) { var toRow = rowHeader1 + maxHeaderLevel - excelHeader.Level - 1; worksheet.Cells[rowHeader1, nCol, toRow, nCol].Value = excelHeader.Name; excelRange = worksheet.Cells[rowHeader1, nCol, toRow, nCol]; excelRange.Merge = true; nCol++; } else { var rowNext = rowHeader1 + 1; var nColNext = nCol + colSpanSub - 1; worksheet.Cells[excelHeader.Level + rowHeader1, nCol, excelHeader.Level + rowHeader1, nColNext].Value = excelHeader.Name; excelRange = worksheet.Cells[excelHeader.Level + rowHeader1, nCol, excelHeader.Level + rowHeader1, nColNext]; excelRange.Merge = true; //nCol = nColNext; foreach (var group in excelHeader.SubExcelHeaders) { renderHeader(worksheet, group, maxHeaderLevel, rowNext, ref nCol); } // nCol++; } formatExcelRange(excelRange); }
protected void btnExcel_Click(object sender, System.EventArgs e) { int?depId = null; if (!string.IsNullOrEmpty(this.tvwDep.SelectedValue.Trim())) { depId = new int?(System.Convert.ToInt32(this.tvwDep.SelectedValue.Trim())); } DataTable table = this.GetTable(depId, 0, 0); DataTable dataTable = this.Replace(table); if (table.Rows.Count > 0) { int days = this.GetDays(); DataRow dataRow = dataTable.NewRow(); dataRow["v_xm"] = "合计"; for (int i = 1; i <= days; i++) { dataRow[i + 2] = table.Compute("sum([" + i.ToString() + "])", "1>0").ToString(); } dataRow["TotalLeaveDays"] = table.Compute("sum(TotalLeaveDays)", "1>0"); dataTable.Rows.Add(dataRow); } dataTable = this.GetTitleByTable(dataTable); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); foreach (DataColumn dataColumn in dataTable.Columns) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 1, 0, 0, 0)); } ExcelHelper.ExportExcel(dataTable, "人员请假统计表", "人员请假统计表", "人员请假统计表.xls", list, null, 0, base.Request.Browser.Browser); }
public void IncreasingSubArrayTest() { int[] input = { -2, 1, 2, 3, 4, 5, -9 }; ExcelHeader.Result result = new ExcelHeader.Result(); result = ExcelHeader.MaxIncreasingSubArray(input); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable dataTable = new DataTable(); dataTable = ConstructReport.GetLaborAnalysis(this.txtTaskCode.Text.Trim(), this.txtTaskName.Text.Trim(), this.prjId, 0, 0); if (dataTable.Rows.Count > 0) { DataRow dataRow = dataTable.NewRow(); dataRow["Num"] = "合计"; dataRow["CurrentLaborBudCost"] = dataTable.Compute("sum(CurrentLaborBudCost)", "1>0"); dataRow["CurrentLaborConsCost"] = dataTable.Compute("sum(CurrentLaborConsCost)", "1>0"); dataRow["CurrentReductionAmount"] = dataTable.Compute("sum(CurrentReductionAmount)", "1>0"); dataRow["LaborBudCost"] = dataTable.Compute("sum(LaborBudCost)", "1>0"); dataRow["LaborConsCost"] = dataTable.Compute("sum(LaborConsCost)", "1>0"); dataRow["ReductionAmount"] = dataTable.Compute("sum(ReductionAmount)", "1>0"); if (System.Convert.ToDecimal(dataRow["CurrentLaborBudCost"]) != 0m) { decimal d = System.Convert.ToDecimal(dataRow["CurrentReductionAmount"]) / System.Convert.ToDecimal(dataRow["CurrentLaborBudCost"]); dataRow["CurrentReductionRate"] = (decimal.Floor(d * 10000m) / 100m).ToString("0.00") + "%"; } else { dataRow["CurrentReductionRate"] = "0.00%"; } if (System.Convert.ToDecimal(dataRow["LaborBudCost"]) != 0m) { decimal d2 = System.Convert.ToDecimal(dataRow["ReductionAmount"]) / System.Convert.ToDecimal(dataRow["LaborBudCost"]); dataRow["ReductionRate"] = (decimal.Floor(d2 * 10000m) / 100m).ToString("0.00") + "%"; } else { dataRow["ReductionRate"] = "0.00%"; } dataTable.Rows.Add(dataRow); } dataTable = this.GetTitleByTable(dataTable); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("本月数", 1, 4, 3, 0)); list.Add(ExcelHeader.Create("累计数", 1, 4, 7, 0)); System.Collections.Generic.List <int> list2 = new System.Collections.Generic.List <int>(); foreach (DataColumn dataColumn in dataTable.Columns) { if (dataColumn.Ordinal >= 3) { list2.Add(dataColumn.Ordinal); } if (dataColumn.Ordinal < 3) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } ExcelHelper.ExportExcel(dataTable, "人工分析表", "人工分析表", "人工分析表.xls", list, null, 2, base.Request.Browser.Browser); }
public void getExcelColumnHeaderTest() { int position; string result = string.Empty; string expected = string.Empty; position = 27; expected = "AA"; result = ExcelHeader.getExcelColumnHeader(position); Assert.AreEqual(result, expected); Console.WriteLine(String.Format("Position: {0} => {1}", position.ToString(), result)); position = 28; expected = "AB"; result = ExcelHeader.getExcelColumnHeader(position); Assert.AreEqual(result, expected); Console.WriteLine(String.Format("Position: {0} => {1}", position.ToString(), result)); position = 26; expected = "Z"; result = ExcelHeader.getExcelColumnHeader(position); Assert.AreEqual(result, expected); Console.WriteLine(String.Format("Position: {0} => {1}", position.ToString(), result)); position = 36; expected = "AJ"; result = ExcelHeader.getExcelColumnHeader(position); Console.WriteLine(String.Format("Position: {0} => {1}", position.ToString(), result)); position = 41; expected = "AO"; result = ExcelHeader.getExcelColumnHeader(position); Console.WriteLine(String.Format("Position: {0} => {1}", position.ToString(), result)); position = 702; expected = "ZZ"; result = ExcelHeader.getExcelColumnHeader(position); Console.WriteLine(String.Format("Position: {0} => {1}", position.ToString(), result)); position = 703; expected = "AAA"; result = ExcelHeader.getExcelColumnHeader(position); Console.WriteLine(String.Format("Position: {0} => {1}", position.ToString(), result)); position = 18278; expected = "ZZ"; result = ExcelHeader.getExcelColumnHeader(position); Console.WriteLine(String.Format("Position: {0} => {1}", position.ToString(), result)); position = 18279; expected = "AAAA"; result = ExcelHeader.getExcelColumnHeader(position); Console.WriteLine(String.Format("Position: {0} => {1}", position.ToString(), result)); }
public string ConnectionStringExporter(string pFileName, int pImex = 1, ExcelHeader pHeader = ExcelHeader.No) { OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder(); builder.Provider = "Microsoft.ACE.OLEDB.12.0"; builder.Add("Extended Properties", $"Excel 12.0 Xml;IMEX={pImex};HDR={pHeader.ToString()};"); builder.DataSource = pFileName; return(builder.ConnectionString); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable formatDataTable = this.GetFormatDataTable(); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); foreach (DataColumn dataColumn in formatDataTable.Columns) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 1, 0, 0, 0)); } ExcelHelper.ExportExcel(formatDataTable, this.hfldPrjName.Value + "费用查询(财务)", "sheet1", "费用查询(财务).xls", list, null, 3, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable dataTable = this.budTaskResSer.GetResPriceDifference(this.prjId, 0, 0); dataTable = this.GetTitleByTable(dataTable); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); foreach (DataColumn dataColumn in dataTable.Columns) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 1, 0, 0, 0)); } ExcelHelper.ExportExcel(dataTable, "资源价差表", "资源价差表", "资源价差表.xls", list, null, 0, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable dataTable = new DataTable(); dataTable = ConstructReport.GetEvenAnalysis(this.txtPrjCode.Text.Trim(), this.txtPrjName.Text.Trim(), 0, 0, base.UserCode, this.hfldIsWBSRelevance.Value); if (dataTable.Rows.Count > 0) { DataRow dataRow = dataTable.NewRow(); dataRow["Num"] = "合计"; dataRow["ContractBud"] = dataTable.Compute("sum(ContractBud)", "1>0"); dataRow["DirectCost"] = dataTable.Compute("sum(DirectCost)", "1>0"); dataRow["IndirectCost"] = dataTable.Compute("sum(IndirectCost)", "1>0"); dataRow["GainLoss"] = dataTable.Compute("sum(GainLoss)", "1>0"); if (System.Convert.ToDecimal(dataRow["ContractBud"]) != 0m) { decimal d = System.Convert.ToDecimal(dataRow["GainLoss"]) / System.Convert.ToDecimal(dataRow["ContractBud"]); dataRow["RatioGainLoss"] = (decimal.Floor(d * 10000m) / 100m).ToString() + "%"; } else { dataRow["RatioGainLoss"] = "0.00%"; } dataTable.Rows.Add(dataRow); } dataTable = this.GetTitleByTable(dataTable); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("累计数", 1, 5, 3, 0)); list.Add(ExcelHeader.Create("实际成本", 2, 2, 4, 0)); System.Collections.Generic.List <int> list2 = new System.Collections.Generic.List <int>(); foreach (DataColumn dataColumn in dataTable.Columns) { if (dataColumn.Ordinal >= 3) { list2.Add(dataColumn.Ordinal); } if (dataColumn.Ordinal < 3) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 3, 0, 0, 3)); } else { if (dataColumn.Ordinal > 3 && dataColumn.Ordinal < 6) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 3, 0, 0, 0)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } } } ExcelHelper.ExportExcel(dataTable, "盈亏分析", "盈亏分析", "盈亏分析.xls", list, null, 3, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { if (!string.IsNullOrEmpty(this.txtStartDate.Text.Trim())) { this.startDate = this.txtStartDate.Text.Trim(); } if (!string.IsNullOrEmpty(this.txtEndDate.Text.Trim())) { this.endDate = this.txtEndDate.Text.Trim(); } if (!string.IsNullOrEmpty(this.txtShipCode.Text.Trim())) { this.shipCode = this.txtShipCode.Text.Trim(); } DataTable dataTable = this.applySer.GetApplyTable(this.startDate, this.endDate, this.shipCode, 0, 0); if (dataTable.Rows.Count > 0) { DataRow dataRow = dataTable.NewRow(); dataRow["EquipmentCode"] = "合计"; dataRow["TotalRefuel"] = dataTable.Compute("sum(TotalRefuel)", "1>0"); dataRow["StockQuantity"] = dataTable.Compute("sum(StockQuantity)", "1>0"); dataRow["ApplyQuantity"] = dataTable.Compute("sum(ApplyQuantity)", "1>0"); dataRow["BudCompleteQuantity"] = dataTable.Compute("sum(BudCompleteQuantity)", "1>0"); dataRow["Ratio"] = dataTable.Compute("sum(Ratio)", "1>0"); dataRow["Sump"] = dataTable.Compute("sum(Sump)", "1>0"); dataRow["RatifyQuantity"] = dataTable.Compute("sum(RatifyQuantity)", "1>0"); dataTable.Rows.Add(dataRow); } dataTable = this.GetTitleByTable(dataTable); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("加油概况", 1, 10, 1, 0)); list.Add(ExcelHeader.Create("审核栏", 1, 3, 11, 0)); System.Collections.Generic.List <int> list2 = new System.Collections.Generic.List <int>(); foreach (DataColumn dataColumn in dataTable.Columns) { if (dataColumn.Ordinal >= 1) { list2.Add(dataColumn.Ordinal); } if (dataColumn.Ordinal < 1) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 1, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } ExcelHelper.ExportExcel(dataTable, "加油申请单", "加油申请单", "加油申请单.xls", list, null, 0, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable dataTable = new DataTable(); dataTable = ConstructReport.GetLSMTaskAnalysis(this.txtTaskCode.Text.Trim(), this.txtTaskName.Text.Trim(), this.prjId, 0, 0); if (dataTable.Rows.Count > 0) { DataRow dataRow = dataTable.NewRow(); dataRow["Num"] = "合计"; dataRow["LaborBudCost"] = System.Convert.ToDecimal(dataTable.Compute("sum(LaborBudCost)", "1>0")).ToString("0.000"); dataRow["StuffBudCost"] = System.Convert.ToDecimal(dataTable.Compute("sum(StuffBudCost)", "1>0")).ToString("0.000"); dataRow["MachineBudCost"] = System.Convert.ToDecimal(dataTable.Compute("sum(MachineBudCost)", "1>0")).ToString("0.000"); dataRow["BudTotal"] = System.Convert.ToDecimal(dataTable.Compute("sum(BudTotal)", "1>0")).ToString("0.000"); dataRow["LaborConsCost"] = System.Convert.ToDecimal(dataTable.Compute("sum(LaborConsCost)", "1>0")).ToString("0.000"); dataRow["StuffConsCost"] = System.Convert.ToDecimal(dataTable.Compute("sum(StuffConsCost)", "1>0")).ToString("0.000"); dataRow["MachineConsCost"] = System.Convert.ToDecimal(dataTable.Compute("sum(MachineConsCost)", "1>0")).ToString("0.000"); dataRow["ConsTotal"] = System.Convert.ToDecimal(dataTable.Compute("sum(ConsTotal)", "1>0")).ToString("0.000"); dataRow["DiffTotal"] = System.Convert.ToDecimal(dataTable.Compute("sum(DiffTotal)", "1>0")).ToString("0.000"); dataTable.Rows.Add(dataRow); } dataTable = this.GetTitleByTable(dataTable); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("目标成本", 1, 4, 3, 0)); list.Add(ExcelHeader.Create("报量成本", 1, 4, 7, 0)); System.Collections.Generic.List <int> list2 = new System.Collections.Generic.List <int>(); foreach (DataColumn dataColumn in dataTable.Columns) { if (dataColumn.Ordinal >= 3 && dataColumn.Ordinal < 11) { list2.Add(dataColumn.Ordinal); } if (dataColumn.Ordinal < 3) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { if (dataColumn.Ordinal > 10) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } } ExcelHelper.ExportExcel(dataTable, "人材机成本明细表", "人材机成本明细表", "人材机成本明细表.xls", list, null, 2, base.Request.Browser.Browser); }
public void getNumberTest() { int result = ExcelHeader.Excelcolumn_to_number("AZ"); Console.WriteLine(result); result = ExcelHeader.Excelcolumn_to_number("AB"); Console.WriteLine(result); result = ExcelHeader.Excelcolumn_to_number("ZZ"); Console.WriteLine(result); result = ExcelHeader.Excelcolumn_to_number("AAA"); Console.WriteLine(result); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable dataTable = ConstructReport.GetProfitInfo(this.txtPrjCode.Text.Trim(), this.txtPrjName.Text.Trim(), base.UserCode, this.dropPrjState.SelectedValue, this.txtPrjPeopleName.Text.Trim(), this.txtPrjStartDate.Text.Trim(), this.txtPrjEndDate.Text.Trim(), 0, 0, this.hfldIsWBSRelevance.Value); this.SetPrjStates(dataTable); if (dataTable.Rows.Count > 0) { DataRow dataRow = dataTable.NewRow(); dataRow["Num"] = "合计"; dataRow["ContractCost"] = dataTable.Compute("sum(ContractCost)", "1>0"); dataRow["BudCost"] = dataTable.Compute("sum(BudCost)", "1>0"); dataRow["ConsTotal"] = dataTable.Compute("sum(ConsTotal)", "1>0"); dataRow["StuffCost"] = dataTable.Compute("sum(StuffCost)", "1>0"); dataRow["LaborCost"] = dataTable.Compute("sum(LaborCost)", "1>0"); dataRow["MachineCost"] = dataTable.Compute("sum(MachineCost)", "1>0"); dataRow["OutSourceCost"] = dataTable.Compute("sum(OutSourceCost)", "1>0"); dataRow["ElseCBSCost"] = dataTable.Compute("sum(ElseCBSCost)", "1>0"); dataRow["DirectCost"] = dataTable.Compute("sum(DirectCost)", "1>0"); dataRow["IndirectCost"] = dataTable.Compute("sum(IndirectCost)", "1>0"); dataRow["TargetProfit"] = dataTable.Compute("sum(TargetProfit)", "1>0"); dataRow["RealityProfit"] = dataTable.Compute("sum(RealityProfit)", "1>0"); dataTable.Rows.Add(dataRow); } dataTable = this.GetTitleByTable(dataTable); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("直接费用", 1, 6, 10, 0)); list.Add(ExcelHeader.Create("利润", 1, 2, 17, 0)); System.Collections.Generic.List <int> list2 = new System.Collections.Generic.List <int>(); foreach (DataColumn dataColumn in dataTable.Columns) { if (dataColumn.Ordinal >= 10) { list2.Add(dataColumn.Ordinal); } if (dataColumn.Ordinal < 10 || dataColumn.Ordinal == 16) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } ExcelHelper.ExportExcel(dataTable, "利润分析", "利润分析", "利润分析.xls", list, null, 3, base.Request.Browser.Browser); }
protected void btnExecl_Click(object sender, System.EventArgs e) { DataTable prjByCondition = ProjectInfo.GetPrjByCondition(this.txtName.Text.Trim(), this.txtCode.Text.Trim(), this.txtManager.Value.Trim(), this.txtPrjPlace.Value.Trim(), this.txtPrjDutyPerson.Value.Trim(), this.txtStartTime.Text.Trim(), this.txtEndTime.Text.Trim(), base.UserCode, 0, 0); if (prjByCondition.Rows.Count > 0) { DataRow dataRow = prjByCondition.NewRow(); dataRow["Num"] = "合计"; dataRow["ContractPrice"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(ContractPrice)", "1>0")).ToString("0.000"); dataRow["BudTotal"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(BudTotal)", "1>0")).ToString("0.000"); dataRow["ConsTotal"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(ConsTotal)", "1>0")).ToString("0.000"); dataRow["ConsResTotal"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(ConsResTotal)", "1>0")).ToString("0.000"); dataRow["ClearingPrice"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(ClearingPrice)", "1>0")).ToString("0.000"); dataRow["SurplusClearingPrice"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(SurplusClearingPrice)", "1>0")).ToString("0.000"); dataRow["CurrentCllectionPrice"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(CurrentCllectionPrice)", "1>0")).ToString("0.000"); dataRow["CllectionPrice"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(CllectionPrice)", "1>0")).ToString("0.000"); dataRow["CurrentPaymentMoney"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(CurrentPaymentMoney)", "1>0")).ToString("0.000"); dataRow["PaymentMoney"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(PaymentMoney)", "1>0")).ToString("0.000"); dataRow["ManagementMargin"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(ManagementMargin)", "1>0")).ToString("0.000"); dataRow["MigrantQualityMarginRate"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(MigrantQualityMarginRate)", "1>0")).ToString("0.000"); dataRow["PerformanceBond"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(PerformanceBond)", "1>0")).ToString("0.000"); dataRow["ElseMargin"] = System.Convert.ToDecimal(prjByCondition.Compute("sum(ElseMargin)", "1>0")).ToString("0.000"); prjByCondition.Rows.Add(dataRow); } DataTable dataTable = this.FormatTable(prjByCondition, false); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("回款", 1, 2, 24, 0)); list.Add(ExcelHeader.Create("支出", 1, 2, 26, 0)); list.Add(ExcelHeader.Create("公司预留款", 1, 5, 28, 0)); new System.Collections.Generic.List <int>(); foreach (DataColumn dataColumn in dataTable.Columns) { if (dataColumn.Ordinal < 24) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } ExcelHelper.ExportExcel(dataTable, "工程基础汇总表", "工程基础汇总表", "工程基础汇总表.xls", list, null, 0, base.Request.Browser.Browser); }
public bool set_val_by_pmid(string v_pmkey, string v_col_name, object v_val) { if (pm_index.ContainsKey(v_pmkey)) { _PmLoc point = pm_index[v_pmkey]; ExcelSheetObject theSheet = _sheets[point.sheetIdx]; ExcelHeader theHeader = theSheet.Header; int col = theHeader.get_col(v_col_name); if (col < 0) { ZFDebug.Error(string.Format("{0}中没找到名为{1}的列", theSheet, v_col_name)); return(false); } int row = pm_index[v_pmkey].row; theSheet.Sheet.Cells[row, col].Value = v_val; return(true); } return(false); }
public string ConnectionString(string pFileName, int pImex = 1, ExcelHeader pHeader = ExcelHeader.No) { OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder(); if (System.IO.Path.GetExtension(pFileName)?.ToUpper() == ".XLS") { builder.Provider = "Microsoft.Jet.OLEDB.4.0"; builder.Add("Extended Properties", $"Excel 8.0;IMEX={pImex};HDR={pHeader.ToString()};"); } else { builder.Provider = "Microsoft.ACE.OLEDB.12.0"; builder.Add("Extended Properties", $"Excel 12.0;IMEX={pImex};HDR={pHeader.ToString()};"); } builder.DataSource = pFileName; return(builder.ConnectionString); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable dataTable = new DataTable(); dataTable = ConstructReport.GetMajorStuffDiffAnalysis(this.txtResourceCode.Text.Trim(), this.txtResourceName.Text.Trim(), this.prjId, 0, 0); if (dataTable.Rows.Count > 0) { DataRow dataRow = dataTable.NewRow(); dataRow["Num"] = "合计"; dataRow["CurrentBudCost"] = dataTable.Compute("sum(CurrentBudCost)", "1>0"); dataRow["CurrentConsCost"] = dataTable.Compute("sum(CurrentConsCost)", "1>0"); dataRow["CurrentDiffPrice"] = dataTable.Compute("sum(CurrentDiffPrice)", "1>0"); dataRow["CurrentReductionAmount"] = dataTable.Compute("sum(CurrentReductionAmount)", "1>0"); dataRow["BudCost"] = dataTable.Compute("sum(BudCost)", "1>0"); dataRow["ConsCost"] = dataTable.Compute("sum(ConsCost)", "1>0"); dataRow["DiffQuantity"] = dataTable.Compute("sum(DiffQuantity)", "1>0"); dataRow["DiffPrice"] = dataTable.Compute("sum(DiffPrice)", "1>0"); dataRow["ReductionAmount"] = dataTable.Compute("sum(ReductionAmount)", "1>0"); dataTable.Rows.Add(dataRow); } dataTable = this.GetTitleByTable(dataTable); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("本月数", 1, 4, 7, 0)); list.Add(ExcelHeader.Create("累计数", 1, 5, 11, 0)); System.Collections.Generic.List <int> list2 = new System.Collections.Generic.List <int>(); foreach (DataColumn dataColumn in dataTable.Columns) { if (dataColumn.Ordinal >= 7) { list2.Add(dataColumn.Ordinal); } if (dataColumn.Ordinal < 7) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } ExcelHelper.ExportExcel(dataTable, "主材差异分析表", "主材差异分析表", "主材差异分析表.xls", list, null, 2, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable formatDataTable = this.GetFormatDataTable(); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("本月数", 1, 4, 3, 0)); list.Add(ExcelHeader.Create("累计数", 1, 4, 7, 0)); foreach (DataColumn dataColumn in formatDataTable.Columns) { if (dataColumn.Ordinal <= 2) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } ExcelHelper.ExportExcel(formatDataTable, this.prjName + "-间接费用分析报表", "sheet1", "间接费用分析.xls", list, null, 3, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable formatDataTable = this.GetFormatDataTable(true); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("目标成本", 1, 2, 5, 0)); list.Add(ExcelHeader.Create("实际成本", 1, 2, 7, 0)); foreach (DataColumn dataColumn in formatDataTable.Columns) { if (dataColumn.Ordinal <= 4 || dataColumn.Ordinal >= 9) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } ExcelHelper.ExportExcel(formatDataTable, "三算分析总表", "sheet1", "三算分析总表.xls", list, null, 4, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable exportData = this.GetExportData(); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("本月数", 1, 4, 7, 0)); list.Add(ExcelHeader.Create("累计数", 1, 4, 3, 0)); foreach (DataColumn dataColumn in exportData.Columns) { if (dataColumn.Ordinal <= 2) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } ExcelHelper.ExportExcel(exportData, "分项工程成本对比表", "分项工程成本对比表", "分项工程成本对比表.xls", list, null, 1, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable dataTable = this.applySer.GetRefuelRecord(this.txtStartDate.Text.Trim(), this.txtEndDate.Text.Trim(), this.txtShipCode.Text.Trim(), 0, 0); if (dataTable.Rows.Count > 0) { DataRow dataRow = dataTable.NewRow(); dataRow["EquipmentCode"] = "合计"; dataRow["StockQuantity"] = dataTable.Compute("sum(StockQuantity)", "1>0"); dataRow["ApplyQuantity"] = dataTable.Compute("sum(ApplyQuantity)", "1>0"); dataRow["AfterQuantity"] = dataTable.Compute("sum(AfterQuantity)", "1>0"); dataTable.Rows.Add(dataRow); } dataTable = this.GetTitleByTable(dataTable); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); foreach (DataColumn dataColumn in dataTable.Columns) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 1, 0, 0, 0)); } ExcelHelper.ExportExcel(dataTable, "单船加油量记录表", "单船加油量记录表", "单船加油量记录表.xls", list, null, 0, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable dataTable = new DataTable(); dataTable = ConstructReport.GetStuffInfo(this.txtCode.Text.Trim(), this.txtName.Text.Trim(), this.txtSpecification.Text.Trim(), this.txtBrand.Text.Trim(), this.txtUnitName.Text.Trim(), this.prjId, 0, 0, this.hfldIsWBSRelevance.Value); if (dataTable.Rows.Count > 0) { DataRow dataRow = dataTable.NewRow(); dataRow["Num"] = "合计"; dataRow["BudQuantity"] = dataTable.Compute("sum(BudQuantity)", "1>0"); dataRow["ConsQuantity"] = dataTable.Compute("sum(ConsQuantity)", "1>0"); dataRow["RealityNumber"] = dataTable.Compute("sum(RealityNumber)", "1>0"); dataRow["BudTotal"] = dataTable.Compute("sum(BudTotal)", "1>0"); dataRow["ConsTotal"] = dataTable.Compute("sum(ConsTotal)", "1>0"); dataRow["RealityTotal"] = dataTable.Compute("sum(RealityTotal)", "1>0"); dataTable.Rows.Add(dataRow); } dataTable = this.GetTitleByTable(dataTable); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("材料数量", 1, 3, 6, 0)); list.Add(ExcelHeader.Create("材料价格", 1, 3, 9, 0)); list.Add(ExcelHeader.Create("材料金额", 1, 3, 12, 0)); System.Collections.Generic.List <int> list2 = new System.Collections.Generic.List <int>(); foreach (DataColumn dataColumn in dataTable.Columns) { if (dataColumn.Ordinal >= 6) { list2.Add(dataColumn.Ordinal); } if (dataColumn.Ordinal < 6) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } ExcelHelper.ExportExcel(dataTable, "材料明细", "材料明细", "材料明细.xls", list, null, 3, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable dataTable = this.applySer.GetAnalysisTable(this.txtStartDate.Text.Trim(), this.txtEndDate.Text.Trim(), this.txtProjectName.Text.Trim(), this.txtShipCode.Text.Trim(), 0, 0); if (dataTable.Rows.Count > 0) { DataRow dataRow = dataTable.NewRow(); dataRow["PrjName"] = "合计"; dataRow["Qty"] = System.Convert.ToDecimal(dataTable.Compute("sum(Qty)", "1>0")).ToString("0.00"); dataRow["Sump"] = System.Convert.ToDecimal(dataTable.Compute("sum(Sump)", "1>0")).ToString("0.00"); dataRow["BudOilWear"] = System.Convert.ToDecimal(dataTable.Compute("sum(BudOilWear)", "1>0")).ToString("0.00"); dataRow["ApplyQuantity"] = System.Convert.ToDecimal(dataTable.Compute("sum(ApplyQuantity)", "1>0")).ToString("0.00"); dataRow["Diff"] = System.Convert.ToDecimal(dataTable.Compute("sum(Diff)", "1>0")).ToString("0.00"); dataTable.Rows.Add(dataRow); } dataTable = this.GetFormatDataTable(dataTable); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); foreach (DataColumn dataColumn in dataTable.Columns) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 1, 0, 0, 0)); } ExcelHelper.ExportExcel(dataTable, "单船油耗分析", "单船油耗分析", "单船油耗分析.xls", list, null, 3, base.Request.Browser.Browser); }
protected void btnExcel_Click(object sender, System.EventArgs e) { DataTable dataTable = new DataTable(); dataTable = this.GetFormatDataTable(); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("入库", 1, 4, 3, 0)); list.Add(ExcelHeader.Create("出库(安港)小计", 1, 2, 7, 0)); list.Add(ExcelHeader.Create("出库(外租)小计", 1, 2, 9, 0)); list.Add(ExcelHeader.Create("出库合计", 1, 2, 11, 0)); list.Add(ExcelHeader.Create("库存合计", 1, 2, 13, 0)); foreach (DataColumn dataColumn in dataTable.Columns) { if (dataColumn.Ordinal < 3 || dataColumn.Ordinal >= 15) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } }
protected void btnExcel_Click(object sender, System.EventArgs e) { this.GetTable(0, 0); DataTable dataTable = (DataTable)this.ViewState["dtReport"]; DataView dataView = dataTable.AsDataView(); dataView.Sort = "OrderNumber"; dataTable = dataView.ToTable(); int arg_44_0 = dataTable.Rows.Count; dataTable = this.GetTitleByTable(dataTable); if (dataTable.Columns.Contains("TaskId")) { dataTable.Columns.Remove("TaskId"); } if (dataTable.Columns.Contains("OrderNumber")) { dataTable.Columns.Remove("OrderNumber"); } dataTable.AcceptChanges(); System.Collections.Generic.List <ExcelHeader> list = new System.Collections.Generic.List <ExcelHeader>(); list.Add(ExcelHeader.Create("目标成本组成", 1, 3, 9, 0)); new System.Collections.Generic.List <int>(); foreach (DataColumn dataColumn in dataTable.Columns) { if (dataColumn.Ordinal <= 8 || dataColumn.Ordinal > 11) { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 1, 0, 0, 2)); } else { list.Add(ExcelHeader.Create(dataColumn.ColumnName, 2, 0, 0, 0)); } } ExcelHelper.ExportExcel(dataTable, "目标成本产出", "目标成本产出", "目标成本产出.xls", list, null, 0, base.Request.Browser.Browser); }
private bool _ParseCSV(byte[] csvBytes, FileManager fileManager, Dictionary<String, ExcelFile> csvExcelFiles) { // function setup int stringBufferOffset = 0; int integerBufferOffset = 1; bool isProperties = (StringId == "PROPERTIES" || StringId == "_TCv4_PROPERTIES"); ObjectDelegator objectDelegator; OutputAttribute[] excelAttributes; bool needOutputAttributes = true; if (fileManager == null || !fileManager.DataFileDelegators.ContainsKey(StringId)) { FieldInfo[] fieldInfos = DataType.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); fieldInfos = fieldInfos.OrderBy(f => f.MetadataToken).ToArray(); // order by defined order - GetFields does not guarantee ordering objectDelegator = new ObjectDelegator(fieldInfos); excelAttributes = new OutputAttribute[fieldInfos.Length]; } else { objectDelegator = fileManager.DataFileDelegators[StringId]; excelAttributes = new OutputAttribute[objectDelegator.FieldCount]; } String[][] tableRows; if (csvBytes == null) { tableRows = _csvTable; } else { // get columns int offset = 0; int colCount = 1; while (csvBytes[offset++] != '\n') if (csvBytes[offset] == CSVDelimiter) colCount++; tableRows = FileTools.CSVToStringArray(csvBytes, colCount, CSVDelimiter); } int rowCount = tableRows.Length; String[] columns = tableRows[0]; if (isProperties) { ExcelFunctions = new List<ExcelFunction>(); _scriptBuffer = new byte[1]; // properties is weird - do this just to ensure 100% byte-for-byte accuracy } // parse file header - could use Regex here - but don't think that'd but faster, in fact, probably a lot slower(?) - meh // format: %s(%s) // first %s = StringId, second %s = FileHeader as String String fileHeader = columns[0]; int fileHeaderStart = fileHeader.IndexOf("(") + 1; int fileHeaderEnd = fileHeader.IndexOf(")"); String fileHeaderStr = fileHeader.Substring(fileHeaderStart, fileHeaderEnd - fileHeaderStart); _excelFileHeader = FileTools.StringToObject<ExcelHeader>(fileHeaderStr, ",", FileHeaderFields); String strId = fileHeader.Substring(0, fileHeader.IndexOf("(")).Trim(); // asking for exception lol Debug.Assert(strId == StringId); // Parse the tableRows bool failedParsing = false; Rows = new List<Object>(); for (int row = 1; row < rowCount; row++) { int col = -1; int csvCol = 0; Object rowInstance = Activator.CreateInstance(DataType); foreach (ObjectDelegator.FieldDelegate fieldDelegate in objectDelegator) { col++; if (needOutputAttributes) excelAttributes[col] = GetExcelAttribute(fieldDelegate.Info); OutputAttribute excelAttribute = excelAttributes[col]; // columns not present if (!columns.Contains(fieldDelegate.Name)) { // create row header object if (fieldDelegate.FieldType == typeof(RowHeader)) { String headerString = tableRows[row][csvCol++]; RowHeader rowHeader = FileTools.StringToObject<RowHeader>(headerString, ",", RowHeaderFields); objectDelegator[fieldDelegate.Name, rowInstance] = rowHeader; continue; } // assign default values MarshalAsAttribute arrayMarshal = null; Array arrayInstance = null; if (fieldDelegate.FieldType.BaseType == typeof(Array)) { arrayMarshal = (MarshalAsAttribute)fieldDelegate.Info.GetCustomAttributes(typeof(MarshalAsAttribute), false).First(); arrayInstance = (Array)Activator.CreateInstance(fieldDelegate.FieldType, arrayMarshal.SizeConst); objectDelegator[fieldDelegate.Name, rowInstance] = arrayInstance; } else if (fieldDelegate.FieldType == typeof(String)) { objectDelegator[fieldDelegate.Name, rowInstance] = String.Empty; } // assign constant non-zero values if (excelAttribute == null || excelAttribute.ConstantValue == null) continue; if (fieldDelegate.FieldType.BaseType == typeof(Array)) { Debug.Assert(arrayInstance != null, "arrayInstance == null"); Debug.Assert(arrayMarshal != null, "arrayMarshal == null"); for (int i = 0; i < arrayMarshal.SizeConst; i++) { arrayInstance.SetValue(excelAttribute.ConstantValue, i); } } else { objectDelegator[fieldDelegate.Name, rowInstance] = excelAttribute.ConstantValue; } continue; } // columns present String value = tableRows[row][csvCol++]; if (fieldDelegate.Name == "code") { int code = (StringId == "REGION") ? int.Parse(value) : StringToCode(value); if (fieldDelegate.FieldType == typeof(short)) { objectDelegator[fieldDelegate.Name, rowInstance] = (short)code; } else { objectDelegator[fieldDelegate.Name, rowInstance] = code; } continue; } bool isArray = (fieldDelegate.FieldType.BaseType == typeof(Array)); bool isEnum = (fieldDelegate.FieldType.BaseType == typeof(Enum)); if (excelAttribute != null) { if (excelAttribute.IsTableIndex && fileManager != null) { int arraySize = 1; if (isArray) { MarshalAsAttribute arrayMarshal = (MarshalAsAttribute)fieldDelegate.Info.GetCustomAttributes(typeof(MarshalAsAttribute), false).First(); arraySize = arrayMarshal.SizeConst; Debug.Assert(arraySize > 0); } String[] indexStrs = value.Split(new[] { ',' }); Int32[] rowIndexValues = new int[arraySize]; for (int i = 0; i < arraySize; i++) rowIndexValues[i] = -1; int maxElements = indexStrs.Length; if (maxElements > arraySize) { Debug.WriteLine(String.Format("{0}: Loss of array elements detected. row = {1}, col = {2}.", StringId, row, col)); maxElements = arraySize; } for (int i = 0; i < maxElements; i++) { value = indexStrs[i]; if (value == "-1") continue; String tableStringId = excelAttribute.TableStringId; bool hasCodeColumn = fileManager.DataTableHasColumn(tableStringId, "code"); if (value.Length == 0 && hasCodeColumn) continue; //LEVEL references multiple blank TREASURE row index values - all appear to be empty rows though, so meh... //Debug.Assert(!String.IsNullOrEmpty(value)); int isNegative = 1; if (value.Length > 0 && value[0] == '-') { isNegative = -1; value = value.Substring(1, value.Length - 1); } int rowIndex = -1; ExcelFile relatedExcel = null; if (csvExcelFiles != null && csvExcelFiles.TryGetValue(tableStringId, out relatedExcel)) { rowIndex = relatedExcel._GetRowIndexFromValue(value, hasCodeColumn ? "code" : null); } if (relatedExcel == null) { if (hasCodeColumn && value.Length <= 4) { int code = StringToCode(value); rowIndex = fileManager.GetExcelRowIndexFromStringId(tableStringId, code, "code"); } else if (fileManager.DataTableHasColumn(tableStringId, "name")) { rowIndex = fileManager.GetExcelRowIndexFromStringId(tableStringId, value, "name"); } else { rowIndex = fileManager.GetExcelRowIndex(tableStringId, value); } } rowIndexValues[i] = rowIndex * isNegative; } if (isArray) { objectDelegator[fieldDelegate.Name, rowInstance] = rowIndexValues; } else { objectDelegator[fieldDelegate.Name, rowInstance] = rowIndexValues[0]; } continue; } if (excelAttribute.IsStringOffset) { if (_stringBuffer == null) _stringBuffer = new byte[1024]; if (String.IsNullOrEmpty(value)) { objectDelegator[fieldDelegate.Name, rowInstance] = -1; continue; } objectDelegator[fieldDelegate.Name, rowInstance] = stringBufferOffset; FileTools.WriteToBuffer(ref _stringBuffer, ref stringBufferOffset, FileTools.StringToASCIIByteArray(value)); stringBufferOffset++; // \0 continue; } if (excelAttribute.IsScript) { if ((fileManager == null && value == "0") || value == "") { objectDelegator[fieldDelegate.Name, rowInstance] = 0; continue; } if (_scriptBuffer == null) { _scriptBuffer = new byte[1024]; _scriptBuffer[0] = 0x00; } int[] scriptByteCode; if (fileManager != null) { ExcelScript excelScript = new ExcelScript(fileManager); scriptByteCode = excelScript.Compile(value, null, StringId, row, col, fieldDelegate.Name); } else { string[] splitValue = value.Split(','); int count = splitValue.Length; scriptByteCode = new int[count]; for (int i = 0; i < count; i++) { scriptByteCode[i] = int.Parse(splitValue[i]); } } objectDelegator[fieldDelegate.Name, rowInstance] = integerBufferOffset; FileTools.WriteToBuffer(ref _scriptBuffer, ref integerBufferOffset, scriptByteCode.ToByteArray()); continue; } if (excelAttribute.IsSecondaryString) { if (SecondaryStrings == null) SecondaryStrings = new List<String>(); if (value == "") { objectDelegator[fieldDelegate.Name, rowInstance] = -1; continue; } if (!SecondaryStrings.Contains(value)) { SecondaryStrings.Add(value); } objectDelegator[fieldDelegate.Name, rowInstance] = SecondaryStrings.IndexOf(value); continue; } if (excelAttribute.IsBitmask) { if (fieldDelegate.FieldType == typeof(UInt32)) { objectDelegator[fieldDelegate.Name, rowInstance] = UInt32.Parse(value); continue; } Object enumVal; try { enumVal = Enum.Parse(fieldDelegate.FieldType, value); } catch (Exception) { String[] enumStrings = value.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); String[] enumNames = Enum.GetNames(fieldDelegate.FieldType); String enumString = String.Empty; String enumSeperator = String.Empty; foreach (String enumStr in enumStrings) { if (!enumNames.Contains(enumStr)) { Debug.WriteLine(String.Format("{0}: bitfield name '{1}' not found.", StringId, enumStr)); continue; } enumString += enumSeperator + enumStr; enumSeperator = ","; } enumVal = enumString == "" ? 0 : Enum.Parse(fieldDelegate.FieldType, enumString); } objectDelegator[fieldDelegate.Name, rowInstance] = enumVal; continue; } } try { Object objValue; if (isArray) { if (fieldDelegate.FieldType == typeof(Int32[])) { objValue = FileTools.StringToArray<Int32>(value, ","); } else { Type elementType = fieldDelegate.FieldType.GetElementType(); if (elementType.BaseType == typeof(Enum)) { String[] enumStrs = value.Split(new[] { ',' }, StringSplitOptions.None); Array enumsArray = Array.CreateInstance(elementType, enumStrs.Length); int i = 0; foreach (String enumStr in enumStrs) { enumsArray.SetValue(Enum.Parse(elementType, enumStr), i++); } objValue = enumsArray; } else { throw new NotImplementedException("if (fieldInfo.FieldType.BaseType == typeof(Array)) :: Type = " + elementType.BaseType); } } objectDelegator[fieldDelegate.Name, rowInstance] = objValue; } else if (isEnum) { object enumVal = Enum.Parse(fieldDelegate.FieldType, value); objectDelegator[fieldDelegate.Name, rowInstance] = enumVal; } else { objValue = FileTools.StringToObject(value, fieldDelegate.FieldType); objectDelegator[fieldDelegate.Name, rowInstance] = objValue; } } catch (Exception e) { Console.WriteLine("Critical Parsing Error: " + e); failedParsing = true; break; } } if (failedParsing) break; needOutputAttributes = false; // applicable only for Unit type; items, missiles, monsters, objects, players if (Attributes.HasStats) { if (StatsBuffer == null) StatsBuffer = new byte[rowCount - 1][]; String value = tableRows[row][csvCol]; String[] stringArray = value.Split(','); byte[] byteArray = new byte[stringArray.Length]; for (int i = 0; i < byteArray.Length; i++) { byteArray[i] = Byte.Parse(stringArray[i]); } StatsBuffer[row - 1] = byteArray; } // properties has extra Scripts stuffs // yea, this is a bit messy, but it's a single table only and mostly done out of curiosity if (isProperties) { String value = tableRows[row][csvCol]; String[] scripts = value.Split('\n'); ExcelFunction excelScript = new ExcelFunction(); if (scripts.Length > 1) { ExcelFunctions.Add(excelScript); } int i = 0; do { if (scripts.Length == 1) continue; i++; String[] values = scripts[i].Split(','); if (values.Length < 4) continue; // script parameters int typeValuesCount = values.Length - 3; ExcelFunction.Parameter parameter = new ExcelFunction.Parameter { Name = values[0], Unknown = UInt32.Parse(values[1]), TypeId = UInt32.Parse(values[2]), TypeValues = new int[typeValuesCount] }; for (int j = 0; j < typeValuesCount; j++) { parameter.TypeValues[j] = Int32.Parse(values[3 + j]); } excelScript.Parameters.Add(parameter); } while (i < scripts.Length - 1 - 2); // -2 for: last line is blank, and line before *might* be script values // last line will be script values if it exists if (i < scripts.Length - 2) { String[] values = scripts[++i].Split(','); int[] scriptValues = new int[values.Length]; for (int j = 0; j < values.Length; j++) { scriptValues[j] = Int32.Parse(values[j]); } excelScript.ScriptByteCode = scriptValues.ToByteArray(); } } Rows.Add(rowInstance); } // resize the integer and string buffers if they were used if (_stringBuffer != null) Array.Resize(ref _stringBuffer, stringBufferOffset); if (_scriptBuffer != null) Array.Resize(ref _scriptBuffer, integerBufferOffset); return HasIntegrity = true; }
/// <summary> /// Converts the Excel file to another Excel type, keeping all but the rows intact. /// Used for TCv4 -> SP conversion. /// </summary> /// <param name="excelFile">An Excel object of type to convert to.</param> /// <param name="newRows">The rows to replace the old.</param> public void ConvertType(ExcelFile excelFile, IEnumerable<Object> newRows) { Attributes = excelFile.Attributes; _excelFileHeader = excelFile._excelFileHeader; Rows = new List<Object>(newRows); }
/// <summary> /// Creates a ExcelFile based on the serialized data source. /// [Reading process updated to match how client does it (can now read "empty" files)] /// </summary> /// <param name="buffer">The serialized excel file as a byte array.</param> /// <returns>True if the buffer parsed okay.</returns> public override sealed bool ParseData(byte[] buffer) { if (buffer == null) return false; if (buffer.Length == 0) return false; int offset = 0; // File Header if (!_CheckToken(buffer, ref offset, Token.cxeh)) return false; _excelFileHeader = FileTools.ByteArrayToStructure<ExcelHeader>(buffer, ref offset); // Strings Block if (!_CheckToken(buffer, ref offset, Token.cxeh)) return false; int stringBufferOffset = FileTools.ByteArrayToInt32(buffer, ref offset); if (stringBufferOffset != 0) { _stringBuffer = new byte[stringBufferOffset]; Buffer.BlockCopy(buffer, offset, _stringBuffer, 0, stringBufferOffset); offset += stringBufferOffset; } // Dataset Block if (!_CheckToken(buffer, ref offset, Token.cxeh)) return false; int rowCount = FileTools.ByteArrayToInt32(buffer, ref offset); Rows = new List<Object>(rowCount); for (int i = 0; i < rowCount; i++) { Rows.Add(FileTools.ByteArrayToStructure(buffer, DataType, ref offset)); IndexFromRow.Add(Rows[i], i); // Add to RowFromCode Dictionary if Row has "code" column FieldInfo field = Attributes.RowType.GetField("code"); if (field != null) { int rowCode; if (field.FieldType == typeof(Int16)) { rowCode = (Int16)field.GetValue(Rows[i]); } else if (field.FieldType == typeof(Int32)) { rowCode = (Int32)field.GetValue(Rows[i]); } else { rowCode = -1; } if (!RowFromCode.ContainsKey(rowCode)) { RowFromCode.Add(rowCode, Rows[i]); CodeFromRow.Add(Rows[i], rowCode); _hasCodeField = true; } } // Add to RowFromFirstString Dictionary if Row has column with attribute SortColumnOrder = 1 FieldInfo[] fields = Attributes.RowType.GetFields(); for (int fieldIndex = 0; fieldIndex < fields.Count(); fieldIndex++) { field = fields[fieldIndex]; OutputAttribute attribute = GetExcelAttribute(field); // Check if field has attributes if (attribute != null) { if (attribute.SortColumnOrder == 1) break; } else // No attribute, skip field { field = null; } } if (field == null) continue; String nameString = ""; // Gets string from string buffer if (field.FieldType == typeof(Int32)) { int nameOffset = (Int32)field.GetValue(Rows[i]); // No string buffer, just use "value" for string // todo: GetValue is *very* slow - change to delegates nameString = ReadStringTable(nameOffset) ?? nameOffset.ToString(); } else if (field.FieldType == typeof(String)) { nameString = (String)field.GetValue(Rows[i]); } if (!RowFromFirstString.ContainsKey(nameString)) { RowFromFirstString.Add(nameString, Rows[i]); FirstStringFromRow.Add(Rows[i], nameString); _hasFirstStringField = true; } } if (rowCount > 0) { // primary index if (!_CheckToken(buffer, ref offset, Token.cxeh)) return false; if (Attributes.HasStats) // items, objects, missles, players { StatsBuffer = new byte[Count][]; for (int i = 0; i < Count; i++) { offset += sizeof(int); // Skip the indice int size = FileTools.ByteArrayToInt32(buffer, ref offset); StatsBuffer[i] = new byte[size]; Buffer.BlockCopy(buffer, offset, StatsBuffer[i], 0, size); offset += size; } } else { offset += (Count * sizeof(int)); // do not allocate this array } // secondary strings if (!_CheckToken(buffer, offset, Token.cxeh)) { int stringCount = FileTools.ByteArrayToInt32(buffer, ref offset); if (stringCount != 0) SecondaryStrings = new List<String>(); for (int i = 0; i < stringCount; i++) { int charCount = FileTools.ByteArrayToInt32(buffer, ref offset); SecondaryStrings.Add(FileTools.ByteArrayToStringASCII(buffer, offset)); offset += charCount; } } } // sort indices for (int i = 0; i < 4; i++) { if (!(_CheckToken(buffer, ref offset, Token.cxeh))) return false; int count = FileTools.ByteArrayToInt32(buffer, ref offset); if (EnableDebug) { if (IndexSortArray == null) IndexSortArray = new List<Int32[]>(); IndexSortArray.Add(FileTools.ByteArrayToInt32Array(buffer, ref offset, count)); } else { offset += (count * sizeof(int)); // do not allocate } } // rcsh, tysh, mysh, dneh, and scripts blocks if (!_CheckToken(buffer, ref offset, Token.cxeh)) return false; if (_CheckToken(buffer, ref offset, Token.rcsh)) { if (!_CheckToken(buffer, ref offset, Token.RcshValue)) return false; if (!_CheckToken(buffer, ref offset, Token.tysh)) return false; if (!_CheckToken(buffer, ref offset, Token.TyshValue)) return false; if (Attributes.HasScriptTable && !_ParsePropertiesScriptTable(buffer, ref offset)) return false; if (!_CheckToken(buffer, ref offset, Token.dneh)) return false; if (!_CheckToken(buffer, ref offset, Token.DnehValue)) return false; if (!_CheckToken(buffer, ref offset, Token.cxeh)) return false; int scriptsByteCount = FileTools.ByteArrayToInt32(buffer, ref offset); //Debug.WriteLine(StringId + " has " + scriptsByteCount + " script bytes."); if (scriptsByteCount != 0) { _scriptBuffer = new byte[scriptsByteCount]; Buffer.BlockCopy(buffer, offset, _scriptBuffer, 0, scriptsByteCount); offset += scriptsByteCount; int intCount = scriptsByteCount - 1; Debug.Assert(intCount % 4 == 0); intCount /= 4; ScriptCode = FileTools.ByteArrayToInt32Array(_scriptBuffer, 1, intCount); } } // final data block if (!_CheckToken(buffer, ref offset, Token.cxeh)) return false; int byteCount = FileTools.ByteArrayToInt32(buffer, ref offset); int blockCount = FileTools.ByteArrayToInt32(buffer, ref offset); if (byteCount != 0) { byteCount = byteCount << 2; offset += (byteCount * blockCount); // do not allocate } return HasIntegrity = (offset == buffer.Length); }
/// <summary> /// Creates a ExcelFile based on the DataTable data. /// </summary> /// <param name="dataTable">The DataTable to read the data from.</param> /// <param name="fileManager">The FileManager to use for script compilations etc.</param> /// <returns>True if the DataTable parsed okay.</returns> public override bool ParseDataTable(DataTable dataTable, FileManager fileManager) { if (dataTable == null) throw new ArgumentNullException("dataTable", "DataTable can not be null!"); if (fileManager == null) throw new ArgumentNullException("fileManager", "FileManager can not be null!"); byte[] newStringBuffer = null; int newStringBufferOffset = 0; byte[] newScriptBuffer = (Attributes.HasScriptTable) ? new byte[1024] : null; int newScriptBufferOffset = 0; // don't start at 1 as it will resize the array wrong byte[][] newStatsBuffer = null; List<String> newSecondaryStrings = null; List<Object> newRows = new List<Object>(); bool failedParsing = false; const BindingFlags bindingFlags = (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); FieldInfo[] dataFields = DataType.GetFields(bindingFlags); OutputAttribute[] excelAttributes; ObjectDelegator objectDelegator; if (fileManager == null || !fileManager.DataFileDelegators.ContainsKey(StringId)) { FieldInfo[] fieldInfos = DataType.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); objectDelegator = new ObjectDelegator(fieldInfos); excelAttributes = new OutputAttribute[fieldInfos.Length]; } else { objectDelegator = fileManager.DataFileDelegators[StringId]; excelAttributes = new OutputAttribute[objectDelegator.FieldCount]; } for (int row = 0; row < dataTable.Rows.Count; row++) { int col = 1; // Skip the indice column (column 0) Object rowInstance = Activator.CreateInstance(DataType); foreach (ObjectDelegator.FieldDelegate fieldDelegate in objectDelegator) { //if (fieldInfo.Name == "warpToFloor") //{ // int bp = 0; //} OutputAttribute attribute = GetExcelAttribute(fieldDelegate.Info); // Initialize private fields if (fieldDelegate.IsPrivate) { // will be in DataTable (first column) if (fieldDelegate.FieldType == typeof(RowHeader)) { String headerString = (String)dataTable.Rows[row][col++]; RowHeader rowHeader = FileTools.StringToObject<RowHeader>(headerString, ",", RowHeaderFields); fieldDelegate.SetValue(rowInstance, rowHeader); continue; } // will not be in DataTable MarshalAsAttribute arrayMarshal = null; Array arrayInstance = null; if (fieldDelegate.FieldType.BaseType == typeof(Array)) { arrayMarshal = (MarshalAsAttribute)fieldDelegate.Info.GetCustomAttributes(typeof(MarshalAsAttribute), false).First(); arrayInstance = (Array)Activator.CreateInstance(fieldDelegate.FieldType, arrayMarshal.SizeConst); fieldDelegate.SetValue(rowInstance, arrayInstance); } else if (fieldDelegate.FieldType == typeof(String)) { fieldDelegate.SetValue(rowInstance, String.Empty); } // assign constant non-zero values if (attribute == null || attribute.ConstantValue == null) continue; if (fieldDelegate.FieldType.BaseType == typeof(Array)) { Debug.Assert(arrayInstance != null, "arrayInstance == null"); Debug.Assert(arrayMarshal != null, "arrayMarshal == null"); for (int i = 0; i < arrayMarshal.SizeConst; i++) { arrayInstance.SetValue(attribute.ConstantValue, i); } } else { objectDelegator[fieldDelegate.Name, rowInstance] = attribute.ConstantValue; } continue; } // Public fields -> these are inside the datatable Object value = dataTable.Rows[row][col++]; bool isArray = (fieldDelegate.FieldType.BaseType == typeof(Array)); if (attribute != null) { if (attribute.IsTableIndex) { if (isArray) { int arraySize = 1; MarshalAsAttribute arrayMarshal = (MarshalAsAttribute)fieldDelegate.Info.GetCustomAttributes(typeof(MarshalAsAttribute), false).First(); arraySize = arrayMarshal.SizeConst; Debug.Assert(arraySize > 0); String strValue = value.ToString(); String[] indexStrs = strValue.Split(new[] { ',' }); Int32[] rowIndexValues = new int[arraySize]; for (int i = 0; i < arraySize; i++) rowIndexValues[i] = -1; int maxElements = indexStrs.Length; if (maxElements > arraySize) { Debug.WriteLine(String.Format("{0}: Loss of array elements detected. row = {1}, col = {2}.", StringId, row, col)); maxElements = arraySize; } int[] rowIndices = new int[maxElements]; for (int i = 0; i < maxElements; i++) { rowIndices[i] = int.Parse(indexStrs[i]); } objectDelegator[fieldDelegate.Name, rowInstance] = rowIndices; } else { objectDelegator[fieldDelegate.Name, rowInstance] = int.Parse(value.ToString()); } // we need to make sure the following data column is a relational column; some tables (and thus the relational column) aren't present, even though the column "links" to them (e.g. LEVEL_AREAS) DataColumn dataColumn = dataTable.Columns[col]; if (dataColumn.ExtendedProperties.ContainsKey(ColumnTypeKeys.IsRelationGenerated) && (bool)dataColumn.ExtendedProperties[ColumnTypeKeys.IsRelationGenerated]) { col++; } continue; } if (attribute.IsStringIndex) { fieldDelegate.SetValue(rowInstance, value); col++; // Skip lookup continue; } if (attribute.IsStringOffset) { String strValue = value as String; if (strValue == null) throw new Exception("A script was not presented as a String!"); if (newStringBuffer == null) { newStringBuffer = new byte[1024]; } if (String.IsNullOrEmpty(strValue)) // i.e. is empty { fieldDelegate.SetValue(rowInstance, -1); continue; } fieldDelegate.SetValue(rowInstance, newStringBufferOffset); FileTools.WriteToBuffer(ref newStringBuffer, ref newStringBufferOffset, FileTools.StringToASCIIByteArray(strValue)); FileTools.WriteToBuffer(ref newStringBuffer, ref newStringBufferOffset, (byte)0x00); continue; } if (attribute.IsScript) { String strValue = value as String; if (strValue == null || (fileManager == null && strValue == "0") || strValue == "") { objectDelegator[fieldDelegate.Name, rowInstance] = 0; continue; } //if (strValue == "GetStat666('skill_points_bonus_total', '') > -1;") //{ // int bp = 0; //} int[] scriptByteCode; int firstComma = -1; // is it an uncompiled int array if (strValue[0] >= '0' && strValue[0] <= '9') firstComma = strValue.IndexOf(','); if (fileManager != null && (firstComma == -1 || firstComma > 3)) // biggest opcode is 3 digits (this doesn't account for white space, but meh for now) { ExcelScript excelScript = new ExcelScript(fileManager); scriptByteCode = excelScript.Compile(strValue); } else { scriptByteCode = strValue.ToArray<int>(','); } if (newScriptBufferOffset == 0) newScriptBufferOffset++; // 0 = no/null script objectDelegator[fieldDelegate.Name, rowInstance] = newScriptBufferOffset; FileTools.WriteToBuffer(ref newScriptBuffer, ref newScriptBufferOffset, scriptByteCode.ToByteArray()); continue; } if (attribute.IsSecondaryString) { if (newSecondaryStrings == null) newSecondaryStrings = new List<String>(); String strValue = value as String; if (strValue == null) return false; if (String.IsNullOrEmpty(strValue)) { fieldDelegate.SetValue(rowInstance, -1); continue; } if (newSecondaryStrings.Contains(strValue) == false) { newSecondaryStrings.Add(strValue); } fieldDelegate.SetValue(rowInstance, newSecondaryStrings.IndexOf(strValue)); continue; } } try { if (fieldDelegate.FieldType != value.GetType()) // i.e. if the type hasn't been converted yet (no attributes means it wasn't converted above) { if (fieldDelegate.FieldType.BaseType == typeof(Enum)) { value = Enum.Parse(fieldDelegate.FieldType, value.ToString()); } else if (fieldDelegate.FieldType == typeof(Int32[])) { value = ((String)value).ToArray<Int32>(','); } else if (fieldDelegate.FieldType.BaseType == typeof(Array)) { Type elementType = fieldDelegate.FieldType.GetElementType(); if (elementType.BaseType == typeof(Enum)) { String[] enumStrs = ((String)value).Split(new[] { ',' }, StringSplitOptions.None); Array enumsArray = Array.CreateInstance(elementType, enumStrs.Length); int i = 0; foreach (String enumStr in enumStrs) { enumsArray.SetValue(Enum.Parse(elementType, enumStr), i++); } value = enumsArray; } else { throw new NotImplementedException("if (fieldInfo.FieldType.BaseType == typeof(Array)) :: Type = " + elementType.BaseType); } } else { value = Convert.ChangeType(value, fieldDelegate.FieldType); } } fieldDelegate.SetValue(rowInstance, value); } catch (Exception e) { ExceptionLogger.LogException(e); Console.WriteLine("Critical Parsing Error: " + e.Message); failedParsing = true; break; } } if (failedParsing) break; // For item types, items, missiles, monsters etc // This must be a hex byte delimited array if (Attributes.HasStats) { if (newStatsBuffer == null) { newStatsBuffer = new byte[dataTable.Rows.Count][]; } const char split = ','; string value = dataTable.Rows[row][col] as string; if (String.IsNullOrEmpty(value)) { Console.WriteLine("Error parsing stats string."); return false; } string[] stringArray = value.Split(split); byte[] byteArray = new byte[stringArray.Length]; for (int i = 0; i < byteArray.Length; i++) { byteArray[i] = Byte.Parse(stringArray[i]); } newStatsBuffer[row] = byteArray; } newRows.Add(rowInstance); } // Parsing Complete, assign new references. These arn't assigned before now incase of a parsing error. Rows = newRows; _stringBuffer = newStringBuffer; if (_stringBuffer != null) Array.Resize(ref _stringBuffer, newStringBufferOffset); _scriptBuffer = newScriptBuffer; if (_scriptBuffer != null) Array.Resize(ref _scriptBuffer, newScriptBufferOffset); StatsBuffer = newStatsBuffer; SecondaryStrings = newSecondaryStrings; // assign file header details (they are not all the same!) ExcelHeader excelHeader = (ExcelHeader)dataTable.ExtendedProperties["FileHeader"]; _excelFileHeader = excelHeader.DeepClone(); return true; }