1 class Program 2 { 3 static void Main(string[] args) 4 { 5 var dt = ExcelToDataTable(@"C:\Users\ZengJW\Desktop\站点地址.xls", true); 6 List<string> address = new List<string>();//地址集合 7 for (int i = 0; i < dt.Rows.Count; i++) 8 { 9 address.Add(dt.Rows[i][1].ToString()); 10 } 11 if (DataTableToExcel(AddressToAmap(address.ToArray()), @"C:\Users\ZengJW\Desktop\test.xls")) 12 { 13 Console.WriteLine("ok!"); 14 } 15 16 17 } 18 19 /// <summary> 20 /// 将地址转化为高德地图坐标(云图数据模板) 21 /// </summary> 22 /// <param name="str">地址</param> 23 /// <returns>返回表格,列1为name,列2为address,列3为经度,列4为纬度,列5为telephone</returns> 24 public static DataTable AddressToAmap(params string[] address) 25 { 26 DataTable dt = new DataTable(); 27 dt.Columns.Add("name"); 28 dt.Columns.Add("address"); 29 dt.Columns.Add("x"); 30 dt.Columns.Add("y"); 31 dt.Columns.Add("telephone"); 32 33 //把key替换成自己的~ 34 StringBuilder sb = new StringBuilder("https://restapi.amap.com/v3/place/text?s=rsv3&key=******************************&page=1&offset=10&city=440600&language=zh_cn&callback=jsonp_585151_&platform=JS&logversion=2.0&sdkversion=1.3&appname=https://lbs.amap.com/console/show/picker&csid=1FCC8F20-A9E7-4E79-81F4-CE27742A797C&keywords="); 35 HttpClient hc = new HttpClient(); 36 for (int i = 0; i < address.Length; i++) 37 { 38 39 //把需要查询的地址拼接到url 40 sb.Append(address[i]); 41 string queryStr = sb.ToString(); 42 var responseMessage = hc.GetAsync(queryStr); 43 var content = responseMessage.Result.Content.ReadAsStringAsync().Result; 44 45 //去掉地址(查询字符串中"keywords="后面的地址),重复使用 46 sb.Remove(queryStr.LastIndexOf('=') + 1, queryStr.Length - (queryStr.LastIndexOf('=') + 1)); 47 48 //去掉多余字符串,保留核心数据 49 dynamic data = JsonConvert.DeserializeObject(content.Substring(content.IndexOf('(') + 1, content.Length - content.IndexOf('(') - 1 - 1)); 50 51 //取搜索结果第一项 52 if (data.pois == null || data.pois.Count == 0) 53 { 54 continue;//给定地址搜索结果为空,跳过 55 } 56 dynamic poi = data.pois[0]; 57 string[] location = poi.location.ToString().Split(',');//分割经纬度 58 string tel = "00000000000"; 59 if (string.IsNullOrEmpty(poi.tel.ToString())) 60 { 61 tel.Replace(':', ',');//tel不为空时 62 } 63 64 //存储poi数据 65 dt.Rows.Add(poi.name, poi.address, location[0], location[1], tel); 66 } 67 hc.Dispose(); 68 return dt; 69 } 70 71 /// <summary> 72 /// 将excel导入到datatable 73 /// </summary> 74 /// <param name="filePath">excel路径</param> 75 /// <param name="isColumnName">第一行是否是列名</param> 76 /// <returns>返回datatable</returns> 77 public static DataTable ExcelToDataTable(string filePath, bool isColumnName) 78 { 79 DataTable dataTable = null; 80 FileStream fs = null; 81 DataColumn column = null; 82 DataRow dataRow = null; 83 IWorkbook workbook = null; 84 ISheet sheet = null; 85 IRow row = null; 86 ICell cell = null; 87 int startRow = 0; 88 try 89 { 90 using (fs = File.OpenRead(filePath)) 91 { 92 // 2007版本 93 if (filePath.IndexOf(".xlsx") > 0) 94 workbook = new XSSFWorkbook(fs); 95 // 2003版本 96 else if (filePath.IndexOf(".xls") > 0) 97 workbook = new HSSFWorkbook(fs); 98 if (workbook != null) 99 { 100 sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet 101 dataTable = new DataTable(); 102 if (sheet != null) 103 { 104 int rowCount = sheet.LastRowNum;//总行数 105 if (rowCount > 0) 106 { 107 IRow firstRow = sheet.GetRow(0);//第一行 108 int cellCount = firstRow.LastCellNum;//列数 109 //构建datatable的列 110 if (isColumnName) 111 { 112 startRow = 1;//如果第一行是列名,则从第二行开始读取 113 for (int i = firstRow.FirstCellNum; i < cellCount; ++i) 114 { 115 cell = firstRow.GetCell(i); 116 if (cell != null) 117 { 118 if (cell.StringCellValue != null) 119 { 120 column = new DataColumn(cell.StringCellValue); 121 dataTable.Columns.Add(column); 122 } 123 } 124 } 125 } 126 else 127 { 128 for (int i = firstRow.FirstCellNum; i < cellCount; ++i) 129 { 130 column = new DataColumn("column" + (i + 1)); 131 dataTable.Columns.Add(column); 132 } 133 } 134 //填充行 135 for (int i = startRow; i <= rowCount; ++i) 136 { 137 row = sheet.GetRow(i); 138 if (row == null) continue; 139 dataRow = dataTable.NewRow(); 140 for (int j = row.FirstCellNum; j < cellCount; ++j) 141 { 142 cell = row.GetCell(j); 143 if (cell == null) 144 { 145 dataRow[j] = ""; 146 } 147 else 148 { 149 //CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,) 150 switch (cell.CellType) 151 { 152 case CellType.Blank: 153 dataRow[j] = ""; 154 break; 155 case CellType.Numeric: 156 short format = cell.CellStyle.DataFormat; 157 //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理 158 if (format == 14 || format == 31 || format == 57 || format == 58) 159 dataRow[j] = cell.DateCellValue; 160 else 161 dataRow[j] = cell.NumericCellValue; 162 break; 163 case CellType.String: 164 dataRow[j] = cell.StringCellValue; 165 break; 166 } 167 } 168 } 169 dataTable.Rows.Add(dataRow); 170 } 171 } 172 } 173 } 174 } 175 return dataTable; 176 } 177 catch (Exception) 178 { 179 if (fs != null) 180 { 181 fs.Close(); 182 } 183 return null; 184 } 185 } 186 187 /// <summary> 188 /// 将datatable导入到excel 189 /// </summary> 190 /// <param name="dt">需要导入的数据</param> 191 /// <returns>导入结果</returns> 192 public static bool DataTableToExcel(DataTable dt, string filePath) 193 { 194 bool result = false; 195 IWorkbook workbook = null; 196 FileStream fs = null; 197 IRow row = null; 198 ISheet sheet = null; 199 ICell cell = null; 200 try 201 { 202 if (dt != null && dt.Rows.Count > 0) 203 { 204 workbook = new HSSFWorkbook(); 205 sheet = workbook.CreateSheet("Sheet0");//创建一个名称为Sheet0的表 206 int rowCount = dt.Rows.Count;//行数 207 int columnCount = dt.Columns.Count;//列数 208 //设置列头 209 row = sheet.CreateRow(0);//excel第一行设为列头 210 for (int c = 0; c < columnCount; c++) 211 { 212 cell = row.CreateCell(c); 213 cell.SetCellValue(dt.Columns[c].ColumnName); 214 } 215 //设置每行每列的单元格, 216 for (int i = 0; i < rowCount; i++) 217 { 218 row = sheet.CreateRow(i + 1); 219 for (int j = 0; j < columnCount; j++) 220 { 221 cell = row.CreateCell(j);//excel第二行开始写入数据 222 cell.SetCellValue(dt.Rows[i][j].ToString()); 223 } 224 } 225 using (fs = File.OpenWrite(filePath)) 226 { 227 workbook.Write(fs);//向打开的这个xls文件中写入数据 228 result = true; 229 } 230 } 231 return result; 232 } 233 catch (Exception ex) 234 { 235 if (fs != null) 236 { 237 fs.Close(); 238 } 239 return false; 240 } 241 } 242 243 }
将地址转化为高德地图坐标(这次是用于云图数据模板)
最新推荐文章于 2023-04-03 16:41:23 发布