Exce表格网

npoi读取复杂的excel(npoi复制sheet1到sheet2)

来源:www.0djx.com  时间:2023-02-17 19:00   点击:300  编辑:表格网  手机版

1. npoi复制sheet1到sheet2

在查询分析器里,直接写SQL语句:

如果是导入数据到现有表,则采用

INSERTINTO表SELECT*FROMOPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)

的形式

如果是导入数据并新增表,则采用

SELECT*INTO表FROMOPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)

的形式。

以上语句是将EXCEL文件里SHEET1工作表中所有的列都读进来,如果只想导部分列,可以

INSERTINTO表(a1,a2,a3)SELECTa1,a2,a3FROMOPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)

其实可以将OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel5.0;HDR=YES;DATABASE=c:\test.xls',sheet1$)当成一个表,例如我就写过这样一个句子:

INSERTINTOeval_channel_employee(channel,employee_id)

SELECTCASEa.渠道WHEN'DIY'THEN1WHEN'RDC'THEN0WHEN'KCM'THEN2ELSE3END

,b.idFROM

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel5.0;HDR=YES;DATABASE=c:\temp\name.xls',sheet1$)ASa,pers_employeeb

WHEREa.员工编码=b.code

简单的方法:

SQL2005中直接可以实现导入功能SQL2008不知道可不可以。

操作过程如下:

第一步:登录到SQLServerManagementStudio,

第二步:在“对象资源管理器”中右键单击“管理”,在弹出列表中单击“导入数据”

第三步:在“导入向导”对话框中单击“下一步”,进入到“选择数据源”对话框,在“数据源”列表中选择“MicrosoftExcel”,同时选择相应的Excel文档,完成后单击“下一步”(一定要勾选该对话框中的“首行包含列名称”,因此它是将Excel文档中的列标题为数据库表中的列项标题)

第四步:指定目标数据库服务,依次单击“下一步”。。。。至到“完成”

第五步:重新打到SQLServerManagementStudio,进入到导入的数据库表,可以发现所导入的Excel文档数据。

你试下下面的吧:

打开SQLServerConfigurationManager,启用SQLServerAgent(实例名)。启动模式更改为“自动”

2. npoi copysheet

两种方法:

1。右键点sheet1,插入工作表

2.插入--工作表

正常启动excel 是3个表,若要多些,可以:工具--选项--常规--新工作簿内的工作表数,把3改为你需要的数即可

3. 复制到sheet1工作表

1.把两个Excel文件都打开 2.切换到要复制的工作表,右键工作表名称,选择移动或复制工作表。 3.选择要移入的工作薄,如果是复制过去的话应勾选建立副本,点击确认完成工作表复制。

4. poi 复制sheet

(一)首先,将excel设置为最合适的行高,通过CTRow对象的setCustomHeight(false)函数实现,具体的代码如下:

XSSFWorkbook workbook = new XSSFWorkbook(文件路径或者文件流);

XSSFSheet sheet = workbook.getSheet(sheetIndex);

XSSFRow xssfRow = sheet.getRow(rowIndex);

CTRow ctRow = xssfRow.getCTRow();

ctRow.setCustomHeight(false);

(二)然后,循环每个sheet页的行,通过XSSFCell的setWrapText(true),就可以设置单元格自动换行,并且自动调整行高,将单元格内容全部显示出来;

(三)最后,对于合并的单元格,只能是通过XSSFRow的setHeight(行高值)来设置,这里说一下思路:

(1)通过sheet获取当前sheet页总共有哪些合并的单元格,例如List<CellRangeAddress> listCombineCell = sheet.getMergedRegions();

(2)计算合并单于格的高度和宽度,采用循环的方式求的每一行的高度之和或者是每一列的宽度之和;

(3)获取合并单元格的内容,首先统计中文字符的个数,然后使用String的getByte().length获取字节数,加上中文字符的个数,最后将这两者之和乘以256(为何要乘以256,可以看POI中获取列宽的源码,在里面除以列256),这样得到了内容的长度;

(4)若内容的长度小于合并单元格的宽度,就不需要进行行高设置了;若内容的长度大于合并单元格的宽度,那么通过合并单元格的宽度除以内容的长度,计算内容需要多少行才能全部显示出来,这里采用取比商大的最小整数,考虑到单元格有padding和margin距离,最好是再加上一行量;这里需要注意如何计算单元格中内容的宽度了,首先将字符串形式的内容按换行符转换成字符数组,接着计算字符数组中每一个元素的宽度,将它们的宽带和单元格实际宽度相除,这样就可以统计字符数组每个元素需要多少行来显示,最终将这些行数累加起来,最后还加上字符数组大小值,这样就得到了单元格内容需要的行数。

(5)计算合并单元格字体的高度,然后乘以内容需要的行数(第4步中求得的行数),得到内容需要的总高度;

(6)判断合并单元格是否是行合并(通过起始行号和终止行号是否相等来判断,若相等就不是行合并,否则就是行合并),若是行合并的情况,那么就需要计算是由多少行合并的(终止行号减去起始行号,再加一),接着计算每一行需要的平均高度(单元格内容的总高度除以行合并的单元格的行数),然后通过循环设置行合并的单元格区域的每一行所需要的平均高度。若不是行合并的单元格,那么直接将行高设置为单元格内容所需的总高度即可。

5. sheet1复制到sheet2和sheet3中的对应位置

整个excel文件称为“工作薄”,里边可以建立多个表格“sheet1”、“sheet2”等,这些表格叫做“工作表”。

“工作薄”与“工作表”的关系是包含关系,一个“工作薄”中可以包含多个“工作表”,没有“工作表”的“工作薄”也是无法存储信息的,“工作表”也不能脱离“工作薄”而独立存在。

6. copy sheet

'相关代码如下,粘贴到sheet1的VBA里面,A列非空,则整行复制到SHEET2中。

sub aa

k=cells(row.count,1).end(xlup).row

for each rng in range("a2:a" & k)

if rng"" then

rng.entirerow.copy sheet2.range("a" & sheet2.cells(row.count,1).end(xlup).row+1)

end if

next

end sub

7. 复制sheet1工作表到sheet1与sheet2之间

将sheet1里面的表格完全一模一样的复制到sheet2里面,可通过直接复制sheet1整个表格即可。

方法步骤如下:

1、打开需要操作的EXCEL表格鼠标停在sheet1标签上单击鼠标右键,并在右键菜单中点击选择“移动或复制”。

2、在弹出的设置界面中,勾选左下角的“建立副本”,并点击“确定”按钮即可。

3、回到EXCEL,可发现在标签页中多了个Sheet1(2)标签页,内容格式和Sheet1完全一致。

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片