需要注意的是申请百度翻译的APPID 和 密钥时,我申请的是标准服务,所以每秒只能调用一次,就必须休眠一秒,不然会报54003,所以翻译大量数据列时调用就比较慢,想要快一些可以申请时选择另外两种申请服务,那样翻译会快些,也就节约了很多的时间。

我用的是php原生代码的写法,所以放在index.php中,

我的项目路径:

html部分

<div style="width:30%;position: absolute; top:5%;left:5%;"><form action="index.php" method="post" enctype="multipart/form-data"><fieldset><legend>翻译</legend><label for="upload-file">上传文件:</label><input type="file" name="upload-fl" /><button type="submit" class="button"><span><span>导入</span></span></button></fieldset></form>
</div>

需要引入js,

<script type="text/javascript" src="plugins/jquery.min-2.0.js"></script>

下面是php代码,获取上传的文件并获取数据,进行随机语言翻译

<?php
require "./Class/PHPExcel.php";
require "./Class/PHPExcel/IOFactory.php";
require "./function.php";
require "./config.php";//API配置
$_appUrl  = 'https://api.fanyi.baidu.com/api/trans/vip/translate';
$_appId   = '您的appid';          // API Key
$_appKey  = '您的密钥';       // 密钥
$_appSalt = rand(1000000000, 9999999999); // 随机数
$_appQPS  = 0;function translate($value, $from, $to)
{global $_appQPS,$_appId,$_appKey,$_appSalt,$_appUrl;$_appQPS++;if($_appQPS == 1){  //$_appQPS是每次调用的频率,每调用一次就休眠一次,这样就不会报54003错误,这里申请的是标准服务,所以每秒只能调用一次sleep(1);$_appQPS = 0;}$args = array('q'     => $value,'appid' => $_appId,'salt'  => $_appSalt,'from'  => $from,'to'    => $to,);// 签名$args['sign'] = buildSign($value, $_appId, $_appSalt, $_appKey);$result = call($_appUrl, $args);$result = json_decode($result, true);if (isset($result['trans_result']['0']['dst'])) {if (!empty($result['trans_result']['0']['dst'])) {return $result['trans_result']['0']['dst'];}$message = sprintf('翻译(%s) [ %s ] 至 (%s) 为空', $from, $value, $to);} else {$message = sprintf('翻译(%s) [ %s ] 至 (%s) 错误失败: %s', $from, $value, $to, print_r($result, true));}echo $message."<br/>";
}//请求超时
@set_time_limit(0);//文件
$tmpName   = isset($_FILES['upload-fl']['name'])     ? $_FILES['upload-fl']['name']     : '';
$tmpFile   = isset($_FILES['upload-fl']['tmp_name']) ? $_FILES['upload-fl']['tmp_name'] : '';
$fileTypes = explode('.', $tmpName);
$fileType  = $fileTypes[count($fileTypes) - 1];
$data      = array();
$productName = array();
$type = array('xlsx','csv');
$language = array('zh','yue','wyw','jp','kor','fra','spa','th','ara','ru','pt','de','it','el','nl','pl','bul','est','dan','fin','cs','rom','slo','swe','hu','cht','vie'
);
$languageLen = count($language) - 1;if (empty($tmpName)) {echo "<script> alert('上传失败,没有选择文件') </script>";
} elseif (!in_array(strtolower($fileType),$type)) {echo "<script> alert('不是xlsx或csv文件,请重新选择') </script>";
}//判断文件是否上传成功
if (is_uploaded_file($tmpFile)) {if (strtolower($fileType) == 'xlsx') {$objPHPExcel = PHPExcel_IOFactory::load($tmpFile); // 加载Excel表格$sheet       = $objPHPExcel->getSheet(0);$allRow      = $sheet->getHighestRow();  //取得总行数for ($i = 2; $i <= $allRow; $i++) {$name   = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();if (!empty($name)) {$randLanguage = $language[mt_rand(0,$languageLen)];$name = translate($name, 'en', $randLanguage);$randLanguage_1 = $language[mt_rand(0,$languageLen)];$name = translate($name,  $randLanguage, $randLanguage_1);$name = translate($name,$randLanguage_1,'en');}array_push($data,$name);}//导出excel$fileName    = 'product'.date('YmdHis').'.xlsx';$objPHPExcel = new PHPExcel();   //实例化excel核心类$sheets      = $objPHPExcel->getActiveSheet()->setTitle('产品名称');//设置sheet列头信息$objPHPExcel->setActiveSheetIndex()->setCellValue('A1', '产品名称');$i = 2; //第一行为表头//整体设置字体和字体大小$objPHPExcel->getDefaultStyle()->getFont()->setName( 'Arial');//整体设置字体$objPHPExcel->getDefaultStyle()->getFont()->setSize(10);//整体设置字体大小$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(40); //设置列宽度foreach ($data as $val) {//设置单元格值$objPHPExcel->getActiveSheet()->setCellValue('A'.$i,$val);$i++;}$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');$objWriter->save( 'example/' . $fileName);$url = APP_HTTP.'/example/'. $fileName;} elseif (strtolower($fileType) == 'csv') {if (!($handle = fopen($tmpFile,'r'))) {echo '<script> alert("文件无法读取!") </script>';}while ($data = fgetcsv($handle)) {//获取产品名$name = trim($data[1]);if (!empty($name)) {$randLanguage = $language[mt_rand(0,$languageLen)];$randLanguage_1 = $language[mt_rand(0,$languageLen)];$name = translate($name, 'en', $randLanguage);$name = translate($name,  $randLanguage, $randLanguage_1);$name = translate($name,$randLanguage_1,'en');}array_push($productName,$name);}$file_name = 'product'.date('YmdHis').'.csv';$data = '"v_name"'."\n";foreach ($productName as $val) {$data .= '"'.$val.'"'."\n";}header("Content-Type: text/csv");header("Content-Disposition: attachment; filename=".$file_name);header('Cache-Control:must-revalidate,post-check=0,pre-check=0');header('Expires:0');header('Pragma:public');echo $data;die;}
}?>

在translate()方法中,有两个方法 buildSign 和 call 我是放在function.php文件,与index.php在同级目录下,需要引入function.php,这样引入: require "./function.php"; 就可以调用这两个方法了。

function.php 文件下的代码

<?php
//加密
function buildSign($query, $appID, $salt, $secKey)
{/*{{{*/$str = $appID . $query . $salt . $secKey;$ret = md5($str);return $ret;
}/*}}}*///发起网络请求
function call($url, $args=null, $method="post", $testflag = 0, $headers=array())
{/*{{{*/$ret = false;$i = 0;while($ret === false){if($i > 1)break;if($i > 0){sleep(1);}$ret = callOnce($url, $args, $method, false, $headers);$i++;}return $ret;
}/*}}}*/function callOnce($url, $args=null, $method="post", $withCookie = false, $headers=array())
{/*{{{*/$ch = curl_init();if($method == "post"){$data = convert($args);// print_r($data);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);curl_setopt($ch, CURLOPT_POST, 1);}else{$data = convert($args);if($data){if(stripos($url, "?") > 0){$url .= "&$data";}else{$url .= "?$data";}}}curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_TIMEOUT, 5);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);if(!empty($headers)){curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);}if($withCookie){curl_setopt($ch, CURLOPT_COOKIEJAR, $_COOKIE);}$r = curl_exec($ch);curl_close($ch);return $r;
}/*}}}*/function convert(&$args)
{/*{{{*/$data = '';if (is_array($args)){foreach ($args as $key=>$val){if (is_array($val)){foreach ($val as $k=>$v){$data .= $key.'['.$k.']='.rawurlencode($v).'&';}}else{$data .="$key=".rawurlencode($val)."&";}}return trim($data, "&");}return $args;
}/*}}}*/

在index.php中 APP_PATH 是定义在config.php,表示导出的Excel所存放的路径

config.php下的代码

define('APP_HOST', (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off' ? 'http://' : 'https://') . $_SERVER['HTTP_HOST']);
define('APP_CATALOG', str_ireplace('/index.php', '', $_SERVER['SCRIPT_NAME']) . '/');
define('APP_HTTP', APP_HOST . APP_CATALOG);

最后是..xlsx文件输出到浏览器所用js代码

<script>$(function(){var url = "<?php echo isset($url) ? $url : '';?>";if(url){window.open(url,'_blank','width=0,height=0,status=0');}});
</script>

亲自测,有用!!!

php 导入 导出Excel 实现翻译两种不同的Excel文件(xlsx文件和csv文件)相关推荐

  1. php 导出excel (html),php两种导出excel的方法

    所需要的:jquery库,phpexcel插件,页面导出excel效果测试文件explode.php,excel导出功能实现文件exp.php和explode_excel.php,文件相关内容在此文下 ...

  2. common-io-2.0的新功能之文件监控FileAlteration(文件监听的两种实现方法《很全的监听文件例子》)...

    common-io-2.0的新功能之文件监控FileAlteration(文件监听的两种实现方法<很全的监听文件例子>) 转载于:https://www.cnblogs.com/rocky ...

  3. 将excel(xls/xlsx)转换成csv文件

    将excel(xls/xlsx)转换成csv文件 首先pom.xml 需要引进的包如下: <dependency><groupId>net.sourceforge.jexcel ...

  4. plsql导出表结构到excel_plsql 将表结构导出到excel中的两种方式

    1.情景展示 如何将表结构导出到excel中(不是建表的SQL语句),如何实现? 2.方式一 新建一个SQL窗口,输入要导出结构的表,选中右键-->描述 右键-->导出-->CSV文 ...

  5. layui导出Excel功能的两种方式的尝试

    第一种方式 利用layui自带的导出功能:在layui文档中有例子和代码 网址:https://www.layui.com/demo/table/parseData.html 只需要在前端界面加入to ...

  6. 怎么把html数据导入excel,将网页表格数据导入到Excel中的两种方法

    将网页表格数据导入到Excel中的第一种方法: 第一步,将包括所需表格的网页打开,并按CTRL+C把网址复制到剪贴板,以备下一步使用. 第二步,打开运行Excel软件,单击菜单栏中的"数据→ ...

  7. 如何将html导入ie收藏,IE 如何导出和导入收藏夹(两种可行方法以IE9为例)

    养成经常备份收藏夹,是一个很好的习惯. 这里给大家介绍,如何导出和导入收藏夹.(本次以IE9为例) 方法一: 当然是非常笨拙的办法啦. 直接将IE收藏夹里面保存的网页,全部复制,另外存在一个地方. 知 ...

  8. 将Eclipse代码导入到Android Studio的两种方式

    转: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0104/2259.html 说到使用Android Studio,除了新建 ...

  9. java excel生成_两种方式实现java生成Excel

    Web应用中难免会遇到需要将数据导出并生成excel文件的需求.同样,对于本博客中的总结,也是建立在为了完成这样的一个需求,才开始去了解其实现形式,并且顺利完成需求的开发,先将实现过程总结于此.本博文 ...

最新文章

  1. Zookeeper开源客户端框架Curator的简单使用
  2. IsomorphicStrings(leetcode205)
  3. 抛弃windows用linux来工作吧
  4. Python 【抖音】短视频的自动上传与发布实例演示,同时支持快手、哔哩哔哩、小红书、微视、西瓜视频、微信视频号等平台的视频自动化同步发布
  5. [字符集]Unicode和UTF-8之间的转换详解
  6. AB1601中如何实现比较精准NOP延时
  7. httpd四之CGI、HTTPS、压缩配置
  8. ​电赛 | 19年全国一等奖,北航学子回忆录(上)
  9. SQL Server 用表中已有数据造数据
  10. 基于.net的微服务架构下的开发测试环境运维实践
  11. 外星人跑深度学习_上海港汇外星人店,51M2020开光追和DLSS2.0畅玩《赛博朋克2077》...
  12. yml的基本语法,以及java读取yml文件
  13. linux判断redis是否启动成功_087、Redis
  14. 一点感想及AIX如何快速入门到精通(转)
  15. MSP430如何给板子下载程序?(IAR MSPFET CCS)
  16. 用python分析股票收益影响因素的方法_用Python分析股票的收益和风险
  17. 开源房产中介管理系统
  18. ffmpeg安装及在java中的使用案例
  19. 一个数字几个字节_字节跳动安全沙龙闭幕 多位专家解析数字经济业务安全
  20. nvme固态硬盘开机慢_别让谣言害了你!关于固态硬盘的谣言以及使用误区 NVMe固态硬盘卡慢怎么办 NVMe固态硬盘卡慢解决方法【详解】-宝商在线...

热门文章

  1. MFC——局域网聊天室(改进)
  2. 基于Android硬件设备跟微信服务器通信的项目心得,以UDP Byte通信为例,建立无向连接,0530手札
  3. 虚拟机黑屏怎么办,虚拟机黑屏的解决办法
  4. python 动态加载与静态加载_python+django加载静态网页模板解析
  5. 没经验可以去代理记账公司吗
  6. NLP词法分析(一):中文分词技术
  7. 【Linux服务器开发】1.4 布隆过滤器-判断海量数据中某条数据是否存在
  8. excil mysql查询 条件_excel多条件查找 Excel中实现多条件查找的15种方法
  9. 数论基础之中国剩余定理(附证明)
  10. git创建分支,提交代码详细流程(保姆级)