我正在创建Excel宏,同时从Excel工作表(包含超过1万行)中提取数据并填充另一个Excel工作表。
我必须逐行插入数据,因为我需要根据列值(例如,EMP_ID)从2-3个不同的表中获取数据。
e.g。 Excel文件 - 1有
function select()
{
var id = $('#nr_reg').val();
$.ajax({
type: 'post',
dataType: 'json',
url: '/id',
data : {
id: id
},
success: function(data){
data = JSON.parse(data);
var id = data.id;
alert("merge");
$('#optic').val(id);
},
error: function(err){
console.log(err);
}
});
}
现在,根据每个员工ID,我需要从其他3个Excel工作表中获取员工相关数据。所以我必须遍历10k记录。
当我执行代码时,Excel应用程序就会挂起。我认为这是因为我尝试逐行插入数据。
有人可以建议更快的方式来插入/更新大量的行。
我已经尝试使用Variant / Array来存储数据,然后填充工作表。但它似乎仍然无法发挥作用。
注意:我正在将源文件中的记录读入RecordSet。 我已经添加了:
Emp_ID | Emp_Name | Age
然后将其设置为默认值。
答案 0 :(得分:1)
我知道这不是一个直接的答案,但有时候教会如何完成工作会更好,只需回复即可。
您的工作需要使用Access(或任何其他dbms)完成。您必须定义三个表,每个表都由Emp_ID索引,并且所有工作人员都变得简单。
答案 1 :(得分:1)
我倾向于同意塞尔吉奥 如果使用数据库完全不是一个选项,那么使用数组是可行的方法。
我已经尝试使用Variant / Array来存储数据,然后填充工作表。但它似乎仍然不起作用。
你能展示你试过的代码吗?
这对我有用:
Dim arData() As Variant
' ... calculate number of rows and columns ...
ReDim arData(1 To numRows, 1 To numCols)
' ... populate arData ...
' Define range with identical dimensions as arData, e.g. insert in second row
Set rng = sh.Range(sh.Cells(2, 1), sh.Cells(numRows + 1, numCols))
' Transfer array to range (this is fast!)
rng.Value = arData
答案 2 :(得分:1)
同意,Excel并不是真正的工具。
如果你坚持下去,请尝试以下方法:
使用类对象作为数据结构,只将一次查阅表读入集合。例如,创建一个名为Employee
的类并添加适当的属性。
Public ID As Long
Public Age As Integer
Public Name As String
要阅读它们,你可以像这样编码......
Private mEmployeeCol As Collection
Dim ws As Worksheet
Dim empData As Employee
Dim v As Variant
Dim r As Long
Set ws = ThisWorkbook.Worksheets("employee stuff")
v = ws.UsedRange.Value2
Set mEmployeeCol = New Collection
For r = LBound(v, 1) To UBound(v, 1)
Set empData = New Employee
empData.ID = v(r, 1)
empData.Name = v(r, 2)
empData.Age = v(r, 3)
mEmployeeCol.Add empData, Key:=CStr(empData.ID)
Next
要查找值,请这样做......
Set empData = mEmployeeCol(CStr(ID))
v(r, [your col]) = empData.ID
然后,当然,肯定会使用一系列变体填充最终的工作表。这很直接......
Dim v(1 To 10000, 1 To 50) As Variant
ws.Range("A1").Resize(UBound(v, 1), UBound(v, 2)).Value = v