Exemple #1
0
        /// <summary>
        ///  根据method 和param 获取对应的数据
        /// </summary>
        /// <param name="method"></param>
        /// <param name="type"></param>
        /// <param name="param"></param>
        /// <param name="tableTitle"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        private string methodForData(string method, string type, string param, ref JArray tableTitle, ref string fileName)
        {
            JObject data       = new JObject();
            string  dataArrStr = "[]";

            switch (type)
            {
            case "reportApi":    //通过 repost api 获取
                JObject para     = new JObject();
                JObject pageInfo = new JObject();
                pageInfo["rows"]   = -1;
                pageInfo["page"]   = 0;
                para["queryJson"]  = param;
                para["pagination"] = pageInfo;
                data = BizApiUtil.ApiRequest(method, para.ToString());
                JObject results = JObject.Parse(data["Results"].ToString());
                if (results.Property("data") != null)
                {
                    dataArrStr = results["data"].ToString();
                }
                else if (results.Property("value") != null)
                {
                    dataArrStr = results["value"].ToString();
                }
                else
                {
                    dataArrStr = data["Results"].ToString();
                }
                break;

            case "json":    //json 本地获取
                dataArrStr = ReportFormTableUtil.getDataByCode(method);
                break;

            case "httpPost":    //通过 http post 获取数据
                break;

            case "exe":    //通过exe 获取数据
                break;

            case "self":    //数据为参数
                dataArrStr = param;
                break;

            case "dataFromParam":    //表头,文件名来自参数或者函数,不能共用部分
                break;

            default:
                break;
            }
            return(dataArrStr);
        }
Exemple #2
0
        public void exportTableToExcel(string tableCode, string param)
        {
            try
            {
                JObject table      = ReportFormTableUtil.getTableByCode(tableCode);                                       //表单
                JArray  tableTitle = JArray.Parse(table["titleList"].ToString());                                         //table 表头
                string  method     = table["method"].ToString();                                                          //请求数据的函数
                int     tableDeep  = table.Property("tableDeep") == null ? 1 : int.Parse(table["tableDeep"].ToString());  //复杂表单模板,复杂表头、复杂表单、复杂表头+表单 表头深度
                bool    isSheet    = table.Property("isSheet") == null ? false : bool.Parse(table["isSheet"].ToString()); //是否是多个sheet
                string  type       = table["type"].ToString();                                                            //请求类型
                string  fileName   = table["label"].ToString();                                                           //不需要带后缀名

                string  dataString = methodForData(method, type, param, ref tableTitle, ref fileName);
                JObject json       = new JObject();
                string  fileUrl    = AppConfig.dataPath + @"\exportTableToExcel\";

                List <DataTable> dataList       = new List <DataTable>();
                List <string>    columnJsonList = new List <string>();
                List <string>    codeList       = new List <string>();
                if (!isSheet)//单个sheet
                {
                    JArray dataJa     = JArray.Parse(dataString);
                    string columnJson = "[";
                    string codes      = "";

                    DataTable data = new DataTable();
                    int       left = 0, width = 0; //单元格开始位置和宽度
                    string    columnCode = "";     //单元格code和类型
                    for (int i = 0, count = tableTitle.Count; i < count; i++)
                    {
                        JObject column = JObject.Parse(tableTitle[i].ToString());
                        columnJson += getFotmatColumnJson(column, left, 1, tableDeep, ref width, ref columnCode, ref data);
                        codes      += columnCode;
                        left       += width;
                        width       = 0;
                        columnCode  = "";
                    }
                    columnJson  = columnJson.Substring(0, columnJson.Length - 1);
                    codes       = codes.Substring(0, codes.Length - 1);
                    columnJson += "]";
                    DataRow  row;
                    string[] codeArr = codes.Split(',');
                    foreach (JObject jo in dataJa)
                    {
                        row = data.NewRow();
                        foreach (string code in codeArr)//遍历元素属性
                        {
                            try
                            {
                                row[code] = jo[code];
                            }
                            catch//赋值失败一定是数字的类型赋值空或字符 数字类型
                            {
                                row[code] = 0;
                            }
                        }
                        data.Rows.Add(row);
                    }
                    dataList.Add(data);
                    columnJsonList.Add(columnJson);
                }
                else//多个sheet
                {
                    JObject dataJo = JObject.Parse(dataString);
                    for (int i = 0, count = tableTitle.Count; i < count; i++)
                    {
                        string    columnJson = "[";
                        string    codes = "";
                        JObject   column = JObject.Parse(tableTitle[i].ToString());
                        JArray    list = JArray.Parse(column["list"].ToString());
                        DataTable data = new DataTable();
                        int       left = 0, width = 1;//单元格开始位置和宽度
                        string    columnCode = "";
                        for (int subIndex = 0, listCount = list.Count; subIndex < listCount; subIndex++)
                        {
                            JObject subColumn = JObject.Parse(list[subIndex].ToString());
                            columnJson += getFotmatColumnJson(subColumn, left, 1, 1, ref width, ref columnCode, ref data);
                            codes      += columnCode;
                            left       += width;
                            width       = 0;
                            columnCode  = "";
                        }
                        columnJson  = columnJson.Substring(0, columnJson.Length - 1);
                        codes       = codes.Substring(0, codes.Length - 1);
                        columnJson += "]";
                        DataRow  row;
                        string[] codeArr = codes.Split(',');
                        JArray   dataJa  = JArray.Parse(dataJo[column["code"].ToString()].ToString());
                        foreach (JObject jo in dataJa)//多层结构数据
                        {
                            row = data.NewRow();
                            foreach (string code in codeArr)//遍历元素属性
                            {
                                try
                                {
                                    row[code] = jo[code];
                                }
                                catch//赋值失败一定是数字的类型赋值空或字符 数字类型
                                {
                                    row[code] = 0;
                                }
                            }
                            data.Rows.Add(row);
                        }
                        dataList.Add(data);
                        columnJsonList.Add(columnJson);
                    }
                }
                ExcelUtil.ExecuteExportExcel(columnJsonList.ToArray(), dataList.ToArray(), fileName);
            }
            catch (Exception ex)
            {
                logUtil.RecordErrorToFile(ex, joPara, "exportTableToExcel");
                ReturnData(0, ex.Message, "");
            }
            finally
            {
            }
        }