Esempio n. 1
0
    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);
    }
Esempio n. 3
0
 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();
     }
 }
Esempio n. 4
0
 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));
             }
         }
     }
 }
Esempio n. 5
0
    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);
    }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
    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);
    }
Esempio n. 8
0
        public void IncreasingSubArrayTest()
        {
            int[] input = { -2, 1, 2, 3, 4, 5, -9 };

            ExcelHeader.Result result = new ExcelHeader.Result();

            result = ExcelHeader.MaxIncreasingSubArray(input);
        }
Esempio n. 9
0
    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);
    }
Esempio n. 10
0
        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));
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
    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);
    }
Esempio n. 13
0
    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);
    }
Esempio n. 14
0
    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);
    }
Esempio n. 15
0
    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);
    }
Esempio n. 16
0
    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);
    }
Esempio n. 17
0
        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);
        }
Esempio n. 18
0
    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);
    }
Esempio n. 19
0
    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);
    }
Esempio n. 20
0
 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);
 }
Esempio n. 21
0
        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);
        }
Esempio n. 22
0
    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);
    }
Esempio n. 23
0
    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);
    }
Esempio n. 24
0
    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);
    }
Esempio n. 25
0
    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);
    }
Esempio n. 26
0
    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);
    }
Esempio n. 27
0
    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);
    }
Esempio n. 28
0
    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);
    }
Esempio n. 29
0
    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));
            }
        }
    }
Esempio n. 30
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);
    }
Esempio n. 31
0
        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;
        }
Esempio n. 32
0
 /// <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);
 }
Esempio n. 33
0
        /// <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);
        }
Esempio n. 34
0
        /// <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;
        }