`

excel导入

    博客分类:
  • poi
阅读更多

工作中导入excel每次都要重写会不会很麻烦?

答案是肯定的。今天写了一个稍微通用一点的excel导出工具类,如果大家看了觉得还蛮好用,或是有什么问题,记得给我留言。

 

package com.system.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.pkg.controller.form.Pojo;
/***
 * 
 * @作者 Dick
 * @创建时间 2015年9月6日 下午3:39:36
 * @TODO excel导入的工具类
 * @修改备注
 * 
 *
 */
/***
 * 
 * @作者 Dick
 * @创建时间 2015年9月6日 下午5:25:13
 * @TODO
 * excel导出工具类,
 * 需要poi支持
 * 
 * @修改备注
 * 
 *
 */
public class ImportExcelUtil {
	private static Logger log = Logger.getLogger(ImportExcelUtil.class);
	/***
	 * 日期格式化类型
	 * 
	 * */
	private static String[] dateFormats = new String[]{"yyyy-MM","yyyyMM","yyyy/MM",   
        "yyyyMMdd","yyyy-MM-dd","yyyy/MM/dd",   
        "yyyyMMddHHmmss",   
                    "yyyy-MM-dd HH:mm:ss",   
                    "yyyy/MM/dd HH:mm:ss"};  
	/***
	 * 
	 * @作者 Dick
	 * @创建时间 2015年9月6日 下午3:08:50
	 * @param @param file
	 * @param @param clazz
	 * @param @param field 格式: excel列名=实体属性名
	 * @param @return
	 * @TODO 读取excel文件的内容。读取失败时返回 null;
	 * 
	 * @修改备注
	 * 
	 *
	 */
	public static List getExcelContent(File file, Class clazz,
			Map<String, Object> fields) {
		FileInputStream io = null;//poi会在结束时自动关闭流
		try {
			io = new FileInputStream(file);
			return getExcelContent(io, clazz, fields);
		} catch (FileNotFoundException e) {
			log.info("导入excel失败,文件不存在");
			log.error(e.getMessage(),e);
		} catch(OfficeXmlFileException e){
			log.error("excel属于Office 2007+ XML,因此采用xlsx读取.");
			//如果是2007以上的excel,在catch中处理
			try {
				io = new FileInputStream(file);
				//xlsx结尾的excel。
				return getExcelContentXlsx(io, clazz, fields);
			} catch (FileNotFoundException e1) {
				log.error(e1.getMessage(),e1);
			}
		}
		return null;
	}

	/****
	 * 
	 * @作者 Dick
	 * @创建时间 2015年9月6日 下午3:37:00
	 * @param @param io
	 * @param @param clazz
	 * @param @param fields 格式: excel列名=实体属性名
	 * @param
	 * @return
	 * @TODO 只能读取*.xls的excel文件流中的内容, 读取失败时返回 null;
	 * @修改备注
	 * 
	 *
	 */
	public static List getExcelContent(InputStream io, Class clazz,
			Map<String, Object> fields) {
		HSSFWorkbook workbook = null;
		HSSFSheet sheet = null;
		List<Object> results =null;
		try {
			 workbook = new HSSFWorkbook(io);
			for (Iterator iterator = fields.keySet().iterator(); iterator
					.hasNext();) {
				String key =  iterator.next().toString();
				String prop =  fields.get(key).toString();
				fields.put(key, clazz.getDeclaredField(prop));
			}
			results=new ArrayList<Object>();
			
			
			sheet = workbook.getSheetAt(0);
			// 标题总列数
			int maxRow = sheet.getLastRowNum();
			List<String> columns = new ArrayList<String>();
			for (int j = 0; j < sheet.getRow(0).getLastCellNum(); j++) {
				columns.add(sheet.getRow(0).getCell(j).getStringCellValue()
						.trim());
			}

			for (int j = 1; j < maxRow; j++) {
				HSSFRow row = sheet.getRow(j);
				if (null != row) {
					Object obj = Class.forName(clazz.getName()).newInstance();
					for (int k = 0; k < row.getLastCellNum(); k++) {
						HSSFCell cell = row.getCell(k);
						Object value = null;
						if (null != cell) {
							switch (cell.getCellType()) {
							case HSSFCell.CELL_TYPE_NUMERIC: // 数字
								// 日期格式处理
								if (HSSFDateUtil.isCellDateFormatted(cell)) {
									if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
										SimpleDateFormat sdf = null;
										if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
												.getBuiltinFormat("h:mm")) {
											sdf = new SimpleDateFormat("HH:mm");
										} else {// 日期
											sdf = new SimpleDateFormat(
													"yyyy-MM-dd");
										}
										Date date = cell.getDateCellValue();
										value = date;
									} else if (cell.getCellStyle()
											.getDataFormat() == 58) {
										// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
										SimpleDateFormat sdf = new SimpleDateFormat(
												"yyyy-MM-dd");
										double v = cell.getNumericCellValue();
										Date date = org.apache.poi.ss.usermodel.DateUtil
												.getJavaDate(v);
										value = date;
									} else {
										double v = cell.getNumericCellValue();
										CellStyle style = cell.getCellStyle();
										DecimalFormat format = new DecimalFormat();
										String temp = style
												.getDataFormatString();
										// 单元格设置成常规
										if (temp.equals("General")) {
											format.applyPattern("#");
										}
										value = Double.valueOf(v);
									}
								}

								break;
							case HSSFCell.CELL_TYPE_STRING: // 字符串
								value = cell.getStringCellValue() != null ? cell
										.getStringCellValue().trim() : null;
								break;
							case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
								value = Boolean.valueOf(cell
										.getBooleanCellValue());
								break;
							case HSSFCell.CELL_TYPE_FORMULA: // 公式
								value = null;
												// + "   ");
								break;
							case HSSFCell.CELL_TYPE_BLANK: // 空值
								value = null;// System.out.println(" ");
								break;
							case HSSFCell.CELL_TYPE_ERROR: // 故障
								value = null;// System.out.println(" ");
								break;
							default:
								value = null;// System.out.print("未知类型   ");
								break;
							}

							Field field = (Field) fields.get(columns.get(k));
							if(field!=null){fieldValueSetting(clazz, field, obj, value);}
						} else {
							continue;
						}
					}

					results.add(obj);
				}

			}
			return results;
		} catch (FileNotFoundException e) {
			log.info("导入excel失败,文件不存在");
			log.error(e.getMessage(),e);
		} catch (IOException e) {
			log.info("导入excel失败,文件流异常");
			log.error(e.getMessage(),e);
		} catch (ClassNotFoundException e) {
			log.info("导入excel失败,无法根据class创建对象");
			log.error(e.getMessage(),e);
		} catch (NoSuchFieldException e) {
			log.info("导入excel失败,无法获取类的属性字段");
			log.error(e.getMessage(),e);
		} catch (SecurityException e) {
			log.info("导入excel失败,无法获取类的属性字段");
			log.error(e.getMessage(),e);
		} catch (InstantiationException e) {
			log.info("导入excel失败,创建对象失败,至少有一个无参的构造函数");
			log.error(e.getMessage(),e);
		} catch (IllegalAccessException e) {
			log.info("导入excel失败,创建行对象失败!");
			log.error(e.getMessage(),e);
		} finally {
			if (workbook != null) {
				workbook = null;
			}

		}

		return null;

	}
	
	/***
	 * 
	 * @作者 Dick
	 * @创建时间 2015年9月6日 下午4:03:50
	 * @param @param io
	 * @param @param clazz
	 * @param @param fields
	 * @param @return
	 * @TODO
	 *  只能读取*.xlsx文件中的内容,读取失败返回 null
	 * 
	 * @修改备注
	 * 
	 *
	 */
	public static List getExcelContentXlsx(InputStream io, Class clazz,
			Map<String, Object> fields) {
		XSSFWorkbook workbook = null;
		XSSFSheet sheet = null;
		List<Object> results = new ArrayList<Object>();
		try {
			workbook = new XSSFWorkbook(io);
			for (Iterator iterator = fields.keySet().iterator(); iterator
					.hasNext();) {
				String key =  iterator.next().toString();
				//System.out.println("100:key="+key);
				String prop =  fields.get(key).toString();
				fields.put(key, clazz.getDeclaredField(prop));
			}
			
			
			sheet = workbook.getSheetAt(0);
			// 标题总列数
			int maxRow = sheet.getLastRowNum();
			List<String> columns = new ArrayList<String>();
			for (int j = 0; j < sheet.getRow(0).getLastCellNum(); j++) {
				columns.add(sheet.getRow(0).getCell(j).getStringCellValue()
						.trim());
			}

			for (int j = 1; j <= maxRow; j++) {
				XSSFRow row = sheet.getRow(j);
				if (null != row) {
					Object obj = Class.forName(clazz.getName()).newInstance();
					for (int k = 0; k < row.getLastCellNum(); k++) {
						XSSFCell cell = row.getCell(k);
						Object value = null;
						if (null != cell) {
							Field field = (Field) fields.get(columns.get(k));
							if(field!=null){
							switch (cell.getCellType()) {
							case XSSFCell.CELL_TYPE_NUMERIC: // 数字
								// 日期格式处理
								if (HSSFDateUtil.isCellDateFormatted(cell)) {
									if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
										SimpleDateFormat sdf = null;
										if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
												.getBuiltinFormat("h:mm")) {
											sdf = new SimpleDateFormat("HH:mm");
										} else {// 日期
											sdf = new SimpleDateFormat(
													"yyyy-MM-dd");
										}
										Date date = cell.getDateCellValue();
										value = date;
									} else if (cell.getCellStyle()
											.getDataFormat() == 58) {
										// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
										SimpleDateFormat sdf = new SimpleDateFormat(
												"yyyy-MM-dd");
										double v = cell.getNumericCellValue();
										Date date = org.apache.poi.ss.usermodel.DateUtil
												.getJavaDate(v);
										value = date;
									} else {
										double v = cell.getNumericCellValue();
										CellStyle style = cell.getCellStyle();
										DecimalFormat format = new DecimalFormat();
										String temp = style
												.getDataFormatString();
										// 单元格设置成常规
										if (temp.equals("General")) {
											format.applyPattern("#");
										}
										value = Double.valueOf(v);
									}
								}

								break;
							case XSSFCell.CELL_TYPE_STRING: // 字符串
								value = cell.getStringCellValue() != null ? cell
										.getStringCellValue().trim() : null;
								break;
							case XSSFCell.CELL_TYPE_BOOLEAN: // Boolean
								value = Boolean.valueOf(cell
										.getBooleanCellValue());
								break;
							case XSSFCell.CELL_TYPE_FORMULA: // 公式
								value = null;// System.out.print(cell.getCellFormula()
												// + "   ");
								break;
							case XSSFCell.CELL_TYPE_BLANK: // 空值
								value = null;// System.out.println(" ");
								break;
							case XSSFCell.CELL_TYPE_ERROR: // 故障
								value = null;// System.out.println(" ");
								break;
							default:
								value = null;// System.out.print("未知类型   ");
								break;
							}

							
								fieldValueSetting(clazz, field, obj, value);
								
							}
						} else {
							continue;
						}
					}

					results.add(obj);
				}

			}
			return results;
		} catch (FileNotFoundException e) {
			log.info("导入excel失败,文件不存在");
			log.error(e.getMessage(),e);
		} catch (IOException e) {
			log.info("导入excel失败,文件流异常");
			log.error(e.getMessage(),e);
		} catch (ClassNotFoundException e) {
			log.info("导入excel失败,无法根据class创建对象");
			log.error(e.getMessage(),e);
		} catch (NoSuchFieldException e) {
			log.info("导入excel失败,无法获取类的属性字段");
			log.error(e.getMessage(),e);
		} catch (SecurityException e) {
			log.info("导入excel失败,无法获取类的属性字段");
			log.error(e.getMessage(),e);
		} catch (InstantiationException e) {
			log.info("导入excel失败,创建对象失败,至少有一个无参的构造函数");
			log.error(e.getMessage(),e);
		} catch (IllegalAccessException e) {
			log.info("导入excel失败,创建行对象失败!");
			log.error(e.getMessage(),e);
		} finally {
			if (workbook != null) {
				workbook = null;
			}

		}

		return null;

	}
	 /**
	  * 
	  * @作者 Dick
	  * @创建时间 2015年9月6日 下午5:03:13
	  * @param @param clazz
	  * @param @param field
	  * @param @param target
	  * @param @param value
	  * @TODO
	  *  向clazz类的对象target的field属性设置值 value
	  * 
	  * @修改备注
	  * 
	  *
	  */
	public static  void fieldValueSetting(Class clazz,Field field,Object target,Object value)  {

			try {
				clazz.getMethod("set"+StringUtils.capitalize(field.getName()),field.getType()).invoke(target, cast(field.getType(),value));
			} catch (IllegalAccessException e) {
				log.error("私有成员,非法访问");
			} catch (IllegalArgumentException e) {
				log.error("非法参数:"+value.getClass().getName()+" to "+field.getType());
			} catch (InvocationTargetException e) {
				log.error("实例对象异常,target="+target.getClass().getName());
			} catch (NoSuchMethodException e) {
				log.error("对象方法异常,method=set"+StringUtils.capitalize(field.getName()));
			} catch (SecurityException e) {
				log.error(e.getMessage());
			}
		 
	
	}
	
	
	/***
	 * 
	 * @作者 Dick
	 * @创建时间 2015年9月6日 下午4:54:00
	 * @param @param type 目标类型
	 * @param @param value 参数类型
	 * @param @return
	 * @TODO
	 * 
	 * 
	 * @修改备注
	 * 
	 *
	 */
	public static Object cast(Class<?> type,Object value){
		if(value.getClass().getName().equals(type.getName())){
			return value;
		}
		if("java.lang.String".equals(type.getName())){
			return value.toString();
		}
		if("java.lang.Long".equals(type.getName())&&"java.lang.String".equals(value.getClass().getName())){
			
			return Long.valueOf(value.toString().trim());
		}
		if("java.lang.Double".equals(type.getName())&&"java.lang.String".equals(value.getClass().getName())){
			
			return Double.valueOf(value.toString().trim());
		}
		if("java.lang.Integer".equals(type.getName())&&"java.lang.String".equals(value.getClass().getName())){
			
			return Integer.valueOf(value.toString().trim());
		}
		if("java.util.Date".equals(type.getName())&&"java.lang.String".equals(value.getClass().getName())){
		
			try {
				return DateUtils.parseDate(value.toString().trim(),dateFormats);
			} catch (ParseException e) {
				log.error("日期格式转换失败:"+value.toString().trim());
				return null;
			}
		}
		if("java.util.Date".equals(type.getName())&&"java.lang.Long".equals(value.getClass().getName())){
			return new Date(Long.valueOf(value.toString()));
		}
		return null;
	}

	/***
	 * 
	 * @作者 Dick
	 * @创建时间 2015年9月6日 下午5:25:47
	 * @param @param args
	 * @TODO
	 * 测试
	 * 
	 * @修改备注
	 * 
	 *
	 */
	public static void main(String[] args) {
		Map<String, Object> fields = new HashMap<String, Object>();
		fields.put("包裹号", "packageId"); //key:excel字段名,value:实体的字段名
		fields.put("订单编号", "orderNumber");
		fields.put("公司", "deliveryCompany");
		fields.put("单号", "deliveryNo");
		fields.put("创建日期", "gmtCreated");
		
		
		List<Pojo> result = ImportExcelUtil.getExcelContent(
				new File("F:\\迅雷下载\\20150906125645.xlsx"), Pojo.class, fields);
		if (result != null) {
			for (int i = 0; i < result.size(); i++) {
				System.out.println(result.toString());
			}

		}
	}
}

 

excel的内容如下:

 

编号 包裹号 公司 单号 金额 手机号码 创建日期
500004 6 1 22222222222222 1.00 1

2015-05-05 00:00:00

 

 

 

package com.pkg.controller.form;

import java.util.Date;

public class Pojo {

	private Long packageId;
	private String orderNumber;
	private String deliveryCompany;
	private String deliveryNo;
	private Date gmtCreated;
	/**
	 * Long
	 * @return the packageId
	 */
	public Long getPackageId() {
		return packageId;
	}
	/**
	 * @param packageId the packageId to set
	 */
	public void setPackageId(Long packageId) {
		this.packageId = packageId;
	}
	/**
	 * String
	 * @return the orderNumber
	 */
	public String getOrderNumber() {
		return orderNumber;
	}
	/**
	 * @param orderNumber the orderNumber to set
	 */
	public void setOrderNumber(String orderNumber) {
		this.orderNumber = orderNumber;
	}
	/**
	 * String
	 * @return the deliveryCompany
	 */
	public String getDeliveryCompany() {
		return deliveryCompany;
	}
	/**
	 * @param deliveryCompany the deliveryCompany to set
	 */
	public void setDeliveryCompany(String deliveryCompany) {
		this.deliveryCompany = deliveryCompany;
	}
	/**
	 * String
	 * @return the deliveryNo
	 */
	public String getDeliveryNo() {
		return deliveryNo;
	}
	/**
	 * @param deliveryNo the deliveryNo to set
	 */
	public void setDeliveryNo(String deliveryNo) {
		this.deliveryNo = deliveryNo;
	}
	/**
	 * Date
	 * @return the gmtCreated
	 */
	public Date getGmtCreated() {
		return gmtCreated;
	}
	/**
	 * @param gmtCreated the gmtCreated to set
	 */
	public void setGmtCreated(Date gmtCreated) {
		this.gmtCreated = gmtCreated;
	}
	
}

 

 放到项目中可能会有编辑异常,调整后即可调用 main函数测试下了。

 

 

转载请注明出处,谢谢!

分享到:
评论

相关推荐

    Thinkphp5整合excel导入导出

    Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel导入导出Thinkphp5整合excel...

    thinkhphp3.2 excel导入导出demo

    thinkhphp3.2 excel导入导出demothinkhphp3.2 excel导入导出demothinkhphp3.2 excel导入导出demothinkhphp3.2 excel导入导出demothinkhphp3.2 excel导入导出demothinkhphp3.2 excel导入导出demothinkhphp3.2 excel...

    易语言EXCEL表导入EDB数据库源码

    易语言是一种专为中国人设计的编程语言,它以简体...总的来说,易语言EXCEL表导入EDB数据库的源码是一个实用的编程示例,展示了如何利用易语言进行数据处理,对于学习易语言和数据库管理的初学者来说是一份宝贵的资料。

    Excel导入例子 java版

    本文档描述了一个使用Java后台方法实现Excel表中的数据导入的示例,包括前端页面代码和后台方法代码。 前端页面代码 前端页面代码使用HTML、JavaScript和jQuery实现了文件上传和导入功能。页面中有两个主要部分:...

    c#ExceL导入支持2003和2007两种导入

    - **行列映射**:确保正确映射Excel中的列到数据库表的字段。 - **性能优化**:大量数据导入时,批量操作比单条插入更快。可以使用SqlBulkCopy类进行批量导入。 在提供的"ExcelDataToSQLServer__demo"示例中,可能...

    易语言EXCEL表导入EDB数据库

    在给定的“易语言EXCEL表导入EDB数据库”主题中,我们将深入探讨如何使用易语言来实现Excel表格数据的导入,并将其存储到EDB(Enterprise Database)数据库中。 首先,我们需要了解的是Excel文件格式。Excel文件...

    excel导入照片和照片的引用

    Excel 导入照片和照片引用详解 在 Excel 中导入照片和引用照片是非常实用的功能,特别是在需要展示大量照片的场景中。下面将详细介绍 Excel 中如何导入照片和引用照片。 Excel 导入照片 在 Excel 中导入照片需要...

    excel导入用到jar包

    在Java编程中,Excel数据导入是一项常见的任务,特别是在数据分析、报表生成或批量处理大量数据时。标题中的"excel导入用到jar包"指的是为了在Java程序中读取和操作Excel文件,我们需要引入特定的库,这里提及的是...

    C#实现Excel导入sqlite的方法

    在C#编程中,将Excel数据导入SQLite数据库是一项常见的任务,尤其在数据处理和分析的场景下。以下是如何使用C#实现这一功能的详细步骤和关键知识点: 首先,需要引入必要的库,包括System.Data.SQLite和System.Data...

    pb9excel导入

    标题与描述概述的知识点是关于使用PowerBuilder 9(PB9)进行Excel文件导入的过程及其实现效率。本文将深入解析这一操作的具体步骤、注意事项以及潜在的错误处理机制,为IT专业人士提供一个全面的PB9 Excel导入指南...

    C# excel导入出错解决办法

    "C# Excel导入出错解决办法" 在ASP.NET项目开发过程中,经常需要进行数据处理,Oracle数据库和Microsoft Excel在数据处理过程中经常使用到。Oracle数据库可以处理大量数据,无论性能和坚固性都是非常好的数据库...

    asp将EXCEL导入导出数据库原程序

    这个"asp将EXCEL导入导出数据库原程序"提供了一个解决方案,能够方便地将Excel中的数据存入MSSQL数据库,同时也能将数据库中的数据导出到Excel文件。 首先,我们需要了解如何使用ASP连接MSSQL数据库。通常,这涉及...

    SpringBoot+AntDesignVue实现excel导入功能

    SpringBoot+AntDesignVue 实现 Excel 导入功能 在本篇文章中,我们将介绍如何使用 SpringBoot 和 AntDesignVue 实现 Excel 导入功能。这个功能主要是使用 Ant Design Vue 中的 upload 组件来实现导入 excel 文件的...

    easyexcel+validation excel导入导出下载

    本文将深入探讨如何结合EasyExcel和Validation实现高效且准确的Excel导入导出与数据校验。 EasyExcel的优势在于其简洁的API设计和对内存的高效利用。它无需预先加载整个Excel文件到内存,而是采用流式读写,降低了...

    前端-HTML-Web Excel导入

    在前端开发中,Web Excel导入是一项常见的需求,它允许用户在网页上直接上传Excel文件,以便进行数据的读取、处理或展示。这项技术对于数据分析、报表制作等场景尤为重要。以下将详细介绍实现Web Excel导入涉及的...

    excel导入数据到Oracle数据库

    3. **准备Excel文件**:确保Excel文件中的数据格式正确,并且包含所有需要导入到数据库表中的列。 #### 三、本地测试环境数据导入步骤 1. **登录PL/SQL Developer**:启动PL/SQL Developer并连接到本地测试数据库...

    .net的Excel导入

    在.NET框架中,处理Excel数据是一项常见的任务,特别是在构建企业级Web应用时,用户可能需要上传Excel文件以导入数据。本篇文章将详细讲解如何在.NET环境中实现Excel的导入功能,以便网页可以处理Excel数据。 首先...

    excel导入到powerdesigner脚本文件含流程

    本文将深入探讨如何利用Excel文件来导入数据到PowerDesigner,以便更有效地管理和设计数据库。 首先,我们需要了解PowerDesigner的基本操作。它提供了丰富的功能,包括表的设计、关系的建立、索引的设置,以及数据...

    pb excel 导入数据窗口

    PB Excel 导入数据窗口 PB Excel 导入数据窗口是 PowerBuilder 中的一种功能强大的数据导入工具,能够将 Excel 文件中的数据快速导入到数据窗口中。下面我们将详细介绍该功能的实现原理和代码实现。 函数名称:GF_...

    springboot上传excel导入到数据库完整demo(后端代码)

    在本项目中,我们主要探讨的是如何利用SpringBoot框架实现Excel数据的导入并将其存储到MySQL数据库中的功能。这是一个常见的需求,在数据批量处理、数据分析或者系统集成时非常有用。下面将详细讲解涉及的关键技术点...

Global site tag (gtag.js) - Google Analytics