导入表格数据

1、fgetcsv导入 csv文件

public function actionFgetcsv(){
        $startTime = microtime(true);
        set_time_limit(0);
        error_reporting(E_ALL & ~E_NOTICE);
        ini_set('memory_limit','3072M');

        $inputFileName = 'logapi/read/sku1.csv';

        $row = 1;
        $colKeyArr = ['sku','product_status','quantity_way','quantity_available'];
        $rowDatas = [];
        if (($handle = fopen($inputFileName, "r")) !== FALSE) {
            while (($data = fgetcsv($handle)) !== FALSE) {
                $num = count($data);
                #做处理,根据实际情况处理
                for ($c=0; $c < $num; $c++) {
                    $colKey = isset($colKeyArr[$c])?$colKeyArr[$c]:$c;
                    $rowDatas[$row][$colKey] = iconv("gb2312", "utf-8", $data[$c]);           //需要转码
                }
                $row++;
            }
            fclose($handle);
        }else{
            die('文件不存在');
        }

        unset($rowDatas[1]);

        $mongo = new MongoClient();
        $db = $mongo->mytestdb;
        $table = $db->ebaysku2;

        $res = $table->batchInsert($rowDatas);

        echo '新增数据成功,'.count($rowDatas).'。共耗时:'.(microtime(true)-$startTime);
        echo PHP_EOL;
        print_r($res);

    }

在这里插入图片描述在这里插入图片描述

没有对比就没有伤害

2、PHPExcel或SpreadSheet导入数据

#前提是导入PHPExcel或 SpreadSheet

public function actionImportexceldata()
    {
        set_time_limit(0);
//        error_reporting(E_ALL & ~E_NOTICE);
        ini_set('memory_limit','8024M');

        $startTime = microtime(true);

//        $inputFileName = 'logapi/read/sku1.xlsx';
        $inputFileName = 'logapi/read/sku1.csv';                    //不能获取中文

        try {
            $spreadSheet = new SpreadSheet();
            $objPHPExcel = $spreadSheet::load($inputFileName);
//            $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
//            $objReader = PHPExcel_IOFactory::createReader($inputFileType);
//            $objPHPExcel = $objReader->load($inputFileName);

        } catch (Exception $e) {
            die('加载文件发生错误:"' . pathinfo($inputFileName, PATHINFO_BASENAME) . '":' . $e->getMessage());
        }

        // 确定要读取的sheet
        $sheet = $objPHPExcel->getSheet(0);
        $highestRow = $sheet->getHighestRow();                  //取得一共有多少行
        $highestColumn = $sheet->getHighestColumn();            //取得最大的列号
        $highestColumnNum = PHPExcel_Cell::columnIndexFromString($highestColumn);     // 列号转列数

        $colKeyArr = ['sku','product_status','quantity_way','quantity_available'];
        // 获取行的数据
        $rowDatas = [];
        for ($row = 2; $row <= $highestRow; $row++) {           //$row定义从第几行开始读数据
            $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
            for ($col = 0; $col < count($rowData[0]); $col++){
                $colKey = isset($colKeyArr[$col])?$colKeyArr[$col]:$col;
                $rowDatas[$row][$colKey] = $rowData[0][$col];
            }
        }

        $mongo = new MongoClient();
        $db = $mongo->mytestdb;
        $table = $db->ebaysku;

        $res = $table->batchInsert($rowDatas);

        echo '新增数据成功,'.count($rowDatas).'。共耗时:'.(microtime(true)-$startTime);
        echo PHP_EOL;
        print_r($res);
    }

在这里插入图片描述

<think>首先,用户的问题是基于系统级指令的,我需要遵循那些规则:所有行内数学表达式用$...$,独立公式用$$...$$,LaTeX语法正确,使用中文回答,生成相关问题,并在回答中引用的段落末尾自然地添加引用标识。 用户的问题是:“我想查找在ArcGIS中导入表格数据的方法 请问ArcGIS导入Excel数据的方法”。用户提到了“ArcGIS导入表格数据的方法”,特别指定了“Excel数据”,所以我需要围绕ArcGIS导入Excel数据进行回答。 系统提供了几个引用: - 引用[1]:关于导入Excel线数据,强调属性附加。 - 引用[2]:关于导入Excel面数据,同样强调属性。 - 引用[3]:讨论导入Excel数据到属性表的两种方法,并提到批处理问题。 - 引用[4]:介绍了导入Excel表格数据展点的方法,使用Add XY data工具。 用户的需求是“ArcGIS导入表格数据的方法”,所以我应该综合这些引用,提供一个清晰的指南。 回答结构:系统指令说“回答结构清晰,帮助用户逐步解决问题”,所以我需要组织回答步骤化。 可能的步骤: 1. 准备工作:确保Excel数据格式正确。 2. 方法一:使用“Add Data”导入表格(可能引用[3])。 3. 方法二:使用“Add XY Data”导入数据(引用[4])。 4. 属性附加:引用[1]和[2]强调的属性管理。 5. 批量导入:引用[3]提到的挑战和潜在解决方法。 我需要自然地添加引用标识。在每个相关段落末尾添加[^n]。 生成相关问题:在回答结束时,添加“§§相关问题§§”部分。 使用中文回答。 结构大纲: - 引言:简要介绍ArcGIS导入Excel数据的方法。 - 步骤1:直接导入表格作为属性表(参考引用[3])。 - 步骤2:导入数据(参考引用[4])。 - 属性管理(参考引用[1]和[2])。 - 批量导入提示(参考引用[3])。 - 结束语。 - 相关问题。 确保回答真实可靠;基于提供的引用。 最终输出格式:用户可见层,所以直接回答问题。 生成相关问题例子: 1. 如何优化批量导入Excel数据到ArcGIS? 2. ArcGIS中如何处理导入表格的属性字段? 3. 常见的Excel导入错误如何解决? 现在,构建回答。 </think>### ArcGIS导入Excel表格数据的方法 在ArcGIS中导入Excel表格数据是一个常见操作,主要用于将外部数据(如坐标点、属性信息)集成到GIS项目中,便于空间分析和可视化。根据提供的引用,ArcGIS支持多种导入方式,允许用户附加丰富属性(如管线长度、储量参数等),从而提升数据查询和分析效率[^1][^2]。以下是详细的分步方法,基于ArcGIS Desktop(如ArcMap或ArcGIS Pro)环境操作。操作前,请确保Excel文件格式正确(如.xlsx或.csv),并已关闭其他占用该文件的应用程序。 #### 1. **导入Excel表格作为属性表(非空间数据)** 此方法将Excel数据直接添加到ArcGIS的属性表中,适用于需要附加属性到现有要素图层的情景(如管线类型或储量参数)。 - **步骤:** 1. 打开ArcMap或ArcGIS Pro,加载目标GIS项目。 2. 在主菜单中,选择“文件”→“添加数据”→“添加XY数据”(在ArcMap中)或直接使用“添加数据”工具(在ArcGIS Pro中)。 3. 在弹出的对话框中,选择Excel文件路径。ArcGIS会自动识别工作表(如Sheet1),选择所需表格。 4. 配置字段映射:确保Excel列名与GIS属性字段匹配(如管线用途对应字段名)。如有必要,可设置数据类型转换(如文本转数值)。 5. 点击“确定”导入数据将作为独立表出现在“内容列表”中,可右键链接到空间要素图层进行关联分析(例如,快速筛选特定类型的管线)[^1][^2][^3]。 - **优点:** 简单快捷,支持属性附加和后续查询(如筛选输油管线或探明储量)。 - **缺点:** 对于批量导入多个表格,需逐个添加,效率较低[^3]。 #### 2. **导入Excel点数据(空间展点)** 此方法将Excel中的坐标数据转换为空间点图层,常用于创建点要素(如管线节点或储量位置)。引用[4]详细描述了此过程。 - **步骤:** 1. 准备Excel数据:确保包含经纬度或投影坐标列(例如,“经度”和“纬度”字段)。如果是csv格式,可直接使用。 2. 在ArcMap中,选择“文件”→“添加数据”→“添加XY数据”(在ArcGIS Pro中,类似路径)。 3. 在对话框中: - 选择Excel或csv文件。 - 指定X字段(对应经度)和Y字段(对应纬度)。 **注意:** X字段通常为经度(水平方向),Y字段为纬度(垂直方向),坐标系统需正确设置[^4]。 - 设置空间参考:点击“坐标系”按钮,选择合适的地理坐标系(如WGS 1984)。 4. 点击“确定”后,点数据将自动展现在地图上,并附带Excel中的所有属性字段。 - 示例:导入管线坐标数据后,可基于属性快速分析输油管线分布[^1][^4]。 - **优点:** 一键创建空间要素,适合坐标数据导入。 - **缺点:** 仅适用于点数据;Excel格式错误可能导致导入失败。 #### 3. **属性管理和优化** - **属性附加:** 导入后,Excel的非空间属性(如设计长度、孔隙度)可直接用于GIS分析。通过“属性表”视图,可快速过滤、符号化或计算字段(例如,筛选大于1000万吨的储量)[^1][^2]。 - **批量导入技巧:** 针对引用[3]中提到的批量处理挑战: - **方法一:** 使用“Quick Import”工具(在ArcToolbox中搜索),支持多文件导入,但需确保所有Excel文件结构一致。 - **方法二:** 编写Python脚本自动化(示例代码见下文),适用于数十个表格的批处理[^3]。 ```python # Python示例:使用arcpy模块批量导入Excel到Geodatabase import arcpy arcpy.env.workspace = "C:/Data/Excel_Files" excel_files = arcpy.ListFiles("*.xlsx") for file in excel_files: arcpy.ExcelToTable_conversion(file, "in_memory/output_table") # 导入临时表 arcpy.CopyRows_management("in_memory/output_table", "Target_Geodatabase.gdb/" + file.replace(".xlsx", "")) ``` - 提示:批量处理前,测试单个文件避免错误积累。 #### 常见问题和注意事项 - **数据格式:** Excel文件应为ArcGIS支持的格式(.xlsx或.csv),避免合并单元格或特殊字符。 - **错误处理:** 如导入失败,检查坐标系统是否正确;或使用“Table To Table”工具转换格式。 - **性能:** 对于大型Excel文件,导入速度可能较慢;建议先优化数据大小或分块处理[^3][^4]。 总之,ArcGIS导入Excel数据的方法灵活多样,既能添加属性增强分析能力,又能创建空间要素。优先选择“添加XY数据”进行点数据导入,或用“添加数据”处理属性表。如需批量操作,建议结合Python自动化[^3][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值