以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [讨论]关于表数据导入到EXCEL (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=143142) |
||||
-- 作者:工匠 -- 发布时间:2019/11/14 17:08:00 -- [讨论]关于表数据导入到EXCEL 老师好: 关于狐表数据图表,折腾了几个月,怎么搞都别扭...... 现在回归原点,看看能不能变通实现(测试了N遍,设置用EXCEL报表做图表数据,预览都没有图表模块显示) 1.在电脑本地用EXCEL建立数据图表模板,并做好固定位置图表数据区域的选择引用 2.窗口控件按钮事件把当前显示可见的表列表行数据直接写入或者导入到指定的EXCEL表(注意:只要把数据写入或导入到指定EXCEL,不用破坏原来设置的图表及图表数据引用) 如果test已打开,要是点击按钮事件能重新把最新数据写入到test最好了 3.最后实现打开效果和test - 副本一样 4.要是能支持宏文件也会灵活很多
谢谢! [此贴子已经被作者于2019/11/14 17:15:46编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2019/11/14 17:32:00 -- 使用vba导出数据 Dim file As String = "E:\\问题\\data\\test - 副本.xls" Dim App As New MSExcel.Application Dim Wb As MSExcel.Workbook = App.WorkBooks.Open(file ) Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1) For i As Integer = 0 To Tables("表A").Rows.Count - 1 For j As Integer = 0 To Tables("表A").Cols.Count - 1 Ws.Cells(i+2,j+1).Value = Tables("表A").Value(i,j) Next Next Wb.Save App.Quit |
||||
-- 作者:工匠 -- 发布时间:2019/11/14 19:56:00 -- 谢谢老师,现在实现一半了,导出可以保留图表了+保留宏功能 还有2个地方需调优 1.现在是整个表所有列导出数据的(不能按实际显示的列导出+行导出(实际导出行是可以按筛选后显示的行导出到表,但是当系统表显示行数发生变化,导出表的行数没变,是因为表的数据没有清空,上次的数据还在EXCEL表里)) (数据清空虽然可以在EXCEL关闭时加用宏按钮清空+关闭,但是如果电脑是WPS打开,宏就不行,看看能不能实现按实际显示数据写入到EXCEL前先清空原有数据) 2.导入到EXCEL过程很慢,10行需要5秒左右,原来不能保留图表功能那种不到1秒,请老师帮看看能不能调优 谢谢! |
||||
-- 作者:有点蓝 -- 发布时间:2019/11/15 8:52:00 -- 1、Ws.Cells(i+2,j+1).Value = Tables("表A").Value(i,j)是赋值 那么清空数据就是这样啊:Ws.Cells(i+2,j+1).Value = nothing 请不要使用wps编辑execl和word模板。 2、execl原来的图表和宏功能影响的,这我没有办法解决
|
||||
-- 作者:工匠 -- 发布时间:2019/11/15 11:38:00 -- 谢谢老师,导出数据生成图表和宏的问题解决了,也可以兼容WPS. 那个清空的只能清空当前的显示行数EXCEL里的行数数据,假如现在是2行,上次是3行,这次导出打开显示的还是3行(EXCEL表应该只有现在table里显示的2行),无法清空除EXCEL标题外的其它行(第3行)(这可以在关闭EXCEL前在用宏清空掉) 主要是看看那个赋值的过程时间看看能不能缩短一些
|
||||
-- 作者:有点蓝 -- 发布时间:2019/11/15 11:50:00 -- 参考:http://www.foxtable.com/webhelp/topics/2121.htm 引用已经使用的单元格区域。
利用UsedRange属性,可以取得在指定工作表中已经使用的单元格区域。如下面的代码就将得到已经使用的行数、列数和单元格个数: Dim App As New MSExcel.Application Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("D:\\Report.xls") Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1) Dim Rg As MSExcel.Range = Ws.UsedRange MessageBox.Show(Rg.Rows.Count) MessageBox.Show(Rg.Columns.Count) MessageBox.Show(Rg.Count) App.Quit |