function DataTable() { this.flg_show_html = 0; this.flg_break_line = 1; this.display_field = ""; this.max_col = 50; this.delete_items = new Array(); this._FieldName = new Array(); this._FieldType = new Array(); this._FieldValue = new Array(); this._CacheField = new Array(); this._p = -1; this._PageSize = 20; this._PageNumber = -1; this._MaxPageNumber = -1; this.TotalRowCount = -1; this.row_list = ""; this.col_list = ""; this.data_list = ""; this.control_code = ""; this.transformed = false; this.data_format = ""; this.data_width = ""; this.data_format_blank_on_zero = false; this.message = ""; this.cache = false; this.find = function (field_name) { return (this._FieldName.indexOf(field_name)); } this.getColumn = function (str_name) { var buf = new Array(); for (var row = 0; row < this.MaxRow(); row++) { buf.push(this.getValueByRow(row, str_name)); } return (buf); } this.PageFirst = function () { this._PageNumber = 1; } this.PageLast = function () { this._PageNumber = this._MaxPageNumber; } this.NextPage = function () { if (this._PageNumber < this._MaxPageNumber) this._PageNumber += 1; } this.PreviousPage = function () { if (this._PageNumber > 1) this._PageNumber -= 1; } this.ToPage = function (_page) { if (_page >= 1 && _page <= this._MaxPageNumber) this._PageNumber = _page; } this.setPageSize = function (_page_size) { var _buf; this._PageSize = _page_size; _buf = this._FieldValue.length % this._PageSize; if (_buf > 0) this._MaxPageNumber = (this._FieldValue.length + (this._PageSize - _buf)) / this._PageSize; else this._MaxPageNumber = (this._FieldValue.length ) / this._PageSize; this._p = 0; if (this._PageNumber > this._MaxPageNumber) this._PageNumber = this._MaxPageNumber; if (this._PageNumber < 1) this._PageNumber = 1; } this.Search = function (fieldname, fieldvalue) { var i = this.SearchFieldName(fieldname) for (var row = 0; row < this.MaxRow(); row++) { var field_row = this._FieldValue[row] if (field_row[i] == fieldvalue) return (row); } return (-1); } // Search 多個欄位, ex: Search this.SearchList = function (dt, fieldnames, fieldvalues) { var fields = []; for (var f = 0; f < fieldnames.length; f++) { //var _f = fieldnames[f].split("|"); //var i = dt.SearchFieldName(_f[_f.length-1]); var i = dt.SearchFieldName(fieldnames[f]); fields.push(i); } for (var row = 0; row < dt.MaxRow(); row++) { var data1 = ""; var field_row = dt._FieldValue[row] for (var f = 0; f < fields.length; f++) { data1 += field_row[fields[f]]; } var data2 = fieldvalues.join(""); if (data1 == data2) return (row); } return (-1); } this.getFieldCount = function () { return(this._FieldName.length); } this.setFieldName = function (fieldname) { this._FieldName = fieldname; } this.getFieldIndex = function (name) { for (var i = 0; i < this.getFieldCount(); i++) { var _field_name = this.getFieldName(i); if (_field_name == name) return (i) } return (-1); } this.getFieldName = function (i) { return (this._FieldName[i]); } this.setFieldType = function (fieldtype) { this._FieldType = fieldtype; } this.getFieldType = function (i) { return (this._FieldType[i]); } this.getFieldTypeByName = function (str) { var i_name = this.SearchFieldName(str); if (i_name != -1) return (this._FieldType[i_name]); else return (""); } this.AddFieldName = function (fieldname) { this._FieldName.push(fieldname); for (var r= 0;r < this.MaxRow(); r++) this._FieldValue[r].push(""); } this.removeFieldName = function (fieldname) { for (var i=0; i"; } return (str); } this.AddRow = function(fieldvalue) { this._FieldValue.push(fieldvalue); this._p = this._FieldValue.length-1; } this.MaxRow = function () { return(this._FieldValue.length); } this.setFieldValue = function (fieldvalue) { this._FieldValue = fieldvalue; this._p = 0; } this.MoveFirst = function () { this._p = 0; } this.MoveLast = function () { this._p = this.MaxRow()-1; } this.MoveNext = function () { if (this._p < this.MaxRow()-1) { this._p++; return (1); } else return (0); } this.MoveTo = function (row) { if (row <= this.MaxRow()-1 && row >= 0) { this._p = row; return (1); } else return (0); } this.MovePrevious = function () { if (this._p > 0) { this._p--; return (1); } else return (0); } this.getValue = function (fieldname) { var i = this.SearchFieldName(fieldname); var field_row = null; if (i != -1) { field_row = this._FieldValue[this._p] return (field_row[i]); } else { return (""); } } this.getRowValue = function (row, fieldname) { var i = this.SearchFieldName(fieldname); var field_row = this._FieldValue[row]; return (field_row[i]); } this.getRowValueByCol = function (row, col) { try { var _field_row = this._FieldValue[row]; var _field_value = _field_row[col]; } catch (e) { } return (_field_value); } this.getValueByIndex = function (index_name, index_value, field_name) { var i_field_name = this.SearchFieldName(field_name); var i_index_name = this.SearchFieldName(index_name); for (var row = 0; row < this.MaxRow(); row++) { var field_row = this._FieldValue[row]; if (field_row[i_index_name] == index_value) return (field_row[i_field_name]); } return ("err"); } this.getValueByRow = function (row, field_name) { try { var i_name = this.SearchFieldName(field_name) if (i_name == -1) { //alert("there is no such Field : " + field_name + " in DataTable ..!!"); //window.status = "there is no such Field : " + field_name + " in DataTable ..!!"; return (""); } var field_row = this._FieldValue[row]; return (field_row[i_name]); } catch (e) { //alert("DataTable getValueByRow Error ..!! " + e.Message); //return ("err !!"); return (""); } } this.setValue = function (fieldname, fieldvalue) { var i = this.SearchFieldName(fieldname); var field_row = this._FieldValue[this._p]; field_row[i] = fieldvalue; } this.setValueByRow = function (row, fieldname, fieldvalue) { var i = this.SearchFieldName(fieldname); var field_row = this._FieldValue[row]; if (i != -1) field_row[i] = fieldvalue; else window.status = ""; } this.getMax = function (fieldName) { var max = ""; for (var r =0; r < this.MaxRow(); r++) { if (this.getValueByRow(r, fieldName) > max) { max = this.getValueByRow(r, fieldName); } } return max; } this.setValueByIndex = function (index_name, index_value, field_name, field_value) { var i_field_name = this.SearchFieldName(field_name); var i_index_name = this.SearchFieldName(index_name); var flg = 0; try { for (var row = 0; row < this.MaxRow(); row++) { var field_row = this._FieldValue[row]; if (field_row[i_index_name] == index_value) { flg = 1; field_row[i_field_name] = field_value; return (true); } } } catch (e) { alert("DataTable.setValueByIndex(" + index_name + ", " + index_value + ", " + fieldname + ", " + fieldvalue + ") error!" + "\nerror message:" + ex.Message ); return (false); } if (flg == 0) { //alert("DataTable.setValueByIndex -> Not find this data row ..!!"); return (false); } } this.setRowValue = function (row, fieldname, fieldvalue) { var i = this.SearchFieldName(fieldname); var field_row = this._FieldValue[row]; field_row[i] = fieldvalue; } this.getListBox = function (listbox_name, listbox_param, value_name, label_name, not_null, display_key) { var str = new StringBuilder(); var i_value = this.SearchFieldName(value_name); if (i_value == -1) i_value = 0; var i_label = this.SearchFieldName(label_name); if (i_label == -1) i_label = 1; if (isNumeric(value_name) == true) i_value = parseInt(value_name, 10); if (isNumeric(label_name) == true) i_label = parseInt(label_name, 10); //if ( typeof(display_key) == "undefined") display_key = "0"; str.Append("\n"); return (str.ToString()); } this.setListBoxOption = function (listbox_name, listbox_param, value_name, label_name, not_null, display_key) { var str = new StringBuilder(); var i_value = this.SearchFieldName(value_name); if (i_value == -1) { alert("下拉單找不到" + value_name + "欄位, 請檢查下拉單的SQL" ) ; return ;} var i_label = this.SearchFieldName(label_name); if (i_label == -1) { alert("下拉單找不到" + label_name + "欄位, 請檢查下拉單的SQL" ) ; return ;} if (isNumeric(value_name) == true) i_value = parseInt(value_name, 10); if (isNumeric(label_name) == true) i_label = parseInt(label_name, 10); if ( typeof(display_key) == "undefined") display_key = "0"; str.replace("%name%", listbox_name); str.replace("%param%", listbox_param); if ($(listbox_name) == null) return; $(listbox_name).options.length = 0; for (var row = 0; row < this.MaxRow(); row++) { var _buf = "%value%@@%label%"; var field_row = this._FieldValue[row]; if (ListTrimSpace) field_row[i_value] = $j.trim(field_row[i_value]); _buf = _buf.ReplaceAll("%value%", field_row[i_value]); if (field_row[i_value] == "" && listbox_name.substring(0,6).toUpperCase() != "SEARCH" && row == 0) { _buf = _buf.ReplaceAll("%label%", ""); } else { if ( display_key == "1") _buf = _buf.ReplaceAll("%label%", field_row[i_value] + " " + field_row[i_label]); else _buf = _buf.ReplaceAll("%label%", field_row[i_label]); } var opt = _buf.split("@@"); $(listbox_name).options[row] = new Option(opt[1], opt[0]); } return (true); } this.getCheckBox = function (name, param, value_name, label_name, cols, str_title, no_table) { var str = new StringBuilder(); // if (!no_table) no_table = false; no_table = true; var i_value = this.SearchFieldName(value_name); //if (i_value == -1) { alert("下拉單找不到" + value_name + "欄位, 請檢查下拉單的SQL" ) ; return ;} var i_label = this.SearchFieldName(label_name); //if (i_label == -1) { alert("下拉單找不到" + label_name + "欄位, 請檢查下拉單的SQL" ) ; return ;} var i_length = 0; if (isNumeric(value_name) == true) i_value = parseInt(value_name, 10); if (isNumeric(label_name) == true) i_label = parseInt(label_name, 10); if (typeof(str_title) == "undefined") { str_title = ""; } if (!no_table) { str.Append("\n "); str.Append("\n "); } for (var row = 0; row < this.MaxRow(); row++) { var _buf_chk = "\n "; var _buf_label = "\n %label%"; var field_row = this._FieldValue[row]; _buf_chk = _buf_chk.ReplaceAll("%name%", name); _buf_chk = _buf_chk.ReplaceAll("%param%", param); _buf_chk = _buf_chk.ReplaceAll("%title%", field_row[i_label]); _buf_chk = _buf_chk.ReplaceAll("%value%", field_row[i_value]); _buf_label = _buf_label.ReplaceAll("%label%", field_row[i_label]); if (!no_table) { str.Append("\n "); } str.Append(_buf_chk); if (!no_table) { str.Append("\n "); str.Append("\n "); } str.Append(_buf_label); if (!no_table) { str.Append("\n "); } str.replace("%title%", str_title); if (!no_table) { if ( ( (row+1)%cols) == 0) { str.Append("\n "); } } } if (!no_table) { str.Append("\n ") str.Append("\n
"); } set_element_value("txt.XML", str.ToString()); return (str.ToString()); } this.getRadioButton = function (name, param, value_name, label_name, cols, no_table ) { var str = new StringBuilder(); var i_value = this.SearchFieldName(value_name); //if (i_value == -1) { alert("下拉單找不到" + value_name + "欄位, 請檢查下拉單的SQL" ) ; return ;} var i_label = this.SearchFieldName(label_name); //if (i_label == -1) { alert("下拉單找不到" + label_name + "欄位, 請檢查下拉單的SQL" ) ; return ;} // if (!no_table) no_table = false; no_table = true; var i_length = 0; if (isNumeric(value_name) == true) i_value = parseInt(value_name, 10); if (isNumeric(label_name) == true) i_label = parseInt(label_name, 10); if (!no_table) { str.Append("\n "); str.Append("\n "); } for (var row = 0; row < this.MaxRow(); row++) { var _buf_radio = "\n "; var _buf_label = "\n %label%"; var field_row = this._FieldValue[row]; _buf_radio = _buf_radio.ReplaceAll("%name%", name); _buf_radio = _buf_radio.ReplaceAll("%param%", param); _buf_radio = _buf_radio.ReplaceAll("%title%", field_row[i_label]); _buf_radio = _buf_radio.ReplaceAll("%value%", field_row[i_value]); _buf_label = _buf_label.ReplaceAll("%label%", field_row[i_label]); if (!no_table) { str.Append("\n "); } str.Append(_buf_radio); if (!no_table) { str.Append("\n "); str.Append("\n "); } str.Append(_buf_label); if (!no_table) { str.Append("\n "); } if (!no_table) { if ( ( (row+1)%cols) == 0) { str.Append("\n "); } } } if (!no_table) { str.Append("\n ") str.Append("\n
"); } return (str.ToString()); } this.copy_by_column = function (str_column_list) { var column = str_column_list.split(","); var _field_name = new Array(); var _field_type = new Array(); var _data_table = new Array(); var _dt = new DataTable(); for (var col = 0; col < column.length; col++) { _field_name.push(column[col]); _field_type.push(this.getFieldTypeByName(column[col])); } for (var row = 0; row < this.MaxRow(); row++) { var _data_row = this._FieldValue[row]; var _new_data_row = new Array(); for (var col = 0; col < column.length; col++) { var str_value = this.getValueByRow(row, column[col]); _new_data_row.push(str_value); } _data_table.push(_new_data_row); } _dt.setFieldName(_field_name); _dt.setFieldType(_field_type); _dt.setFieldValue(_data_table); return (_dt); } this.copy = function () { var _field_name = new Array(); var _field_type = new Array(); var _data_table = new Array(); var _dt = new DataTable(); for (var col = 0; col < this._FieldName.length; col++) { _field_name.push(this._FieldName[col]); _field_type.push(this._FieldType[col]); } for (var row = 0; row < this.MaxRow(); row++) { var _data_row = this._FieldValue[row]; var _new_data_row = new Array(); for (var col = 0; col < _data_row.length; col++) _new_data_row.push(_data_row[col]); _data_table.push(_new_data_row); } _dt.setFieldName(_field_name); _dt.setFieldType(_field_type); _dt.setFieldValue(_data_table); return (_dt); } this.getFirstSearchDataTable = function (index_name, index_value) { var i_name = this.SearchFieldName(index_name); var _field_name = new Array(); var _field_type = new Array(); var _data_table = new Array(); var _dt = new DataTable(); for (var col = 0; col < this._FieldName.length; col++) { _field_name.push(this._FieldName[col]); _field_type.push(this._FieldType[col]); } for (var row = 0; row < this.MaxRow(); row++) { var _data_row = this._FieldValue[row]; if (_data_row[i_name] == index_value) { var _new_data_row = new Array(); for (var col = 0; col < _data_row.length; col++) _new_data_row.push(_data_row[col]); _data_table.push(_new_data_row); break; } } _dt.setFieldName(_field_name); _dt.setFieldType(_field_type); _dt.setFieldValue(_data_table); return (_dt); } this.getSearchDataTable = function (index_name, index_value) { var i_name = this.SearchFieldName(index_name); var _field_name = new Array(); var _field_type = new Array(); var _data_table = new Array(); var _dt = new DataTable(); for (var col = 0; col < this._FieldName.length; col++) { _field_name.push(this._FieldName[col]); _field_type.push(this._FieldType[col]); } for (var row = 0; row < this.MaxRow(); row++) { var _data_row = this._FieldValue[row]; if (_data_row[i_name] == index_value) { var _new_data_row = new Array(); for (var col = 0; col < _data_row.length; col++) _new_data_row.push(_data_row[col]); _data_table.push(_new_data_row); } } _dt.setFieldName(_field_name); _dt.setFieldType(_field_type); _dt.setFieldValue(_data_table); return (_dt); } this.AddNewRow = function () { var row_data = new Array() for (var col = 0; col < this.getFieldCount(); col++) row_data.push(""); this.AddRow(row_data); } this.AddNewRows = function (row_count) { for (var row = 0; row < row_count; row++) this.AddNewRow(); } this.InsertNewRow = function (row_number) { var row_data = new Array() for (var col = 0; col < this.getFieldCount()-1; col++) row_data.push(""); this._FieldValue.splice(row_number, 0, row_data); } this.RemoveRowByNumber = function (row_number) { try { try { var iGuid = this.getValueByRow(row_number, "iGuid"); if (iGuid != "") this.delete_items.push(iGuid); } catch (e) {}; this._FieldValue.splice(row_number, 1); this.setPageSize(this._PageSize); } catch (e) { alert("DataTable.RemoveRowByNumber has error : " + e.Message); } } this.RemoveLastRow = function () { try { this.RemoveRowByNumber(this.MaxRow()-1); } catch (e) { alert("DataTable.RemoveLastRow() Error : " + e.Message); return (false); } } this.RemoveAll = function() { this._FieldValue = new Array(); _p = -1; } this.RemoveRowByIndex = function (index_name, index_value) { var row_number = -1; row_number = this.Search(index_name, index_value); if (row_number != -1) this.RemoveRowByNumber(row_number); else alert("no this record in DataTable ..!!"); } this.InsertFormDataTable = function (dt) { this.RemoveAll(); this.AddNewRows(dt.MaxRow()); for (var row = 0; row < dt.MaxRow(); row++) { for (var col = 0; col < dt.getFieldCount(); col ++) this.setValueByRow(row, dt.getFieldName(col), dt.getValueByRow(row, dt.getFieldName(col))); } } this.AppendFormDataTable = function (dt) { var row_no = this.MaxRow(); this.AddNewRows(dt.MaxRow()); for (var row = 0; row < dt.MaxRow(); row++) { for (var col = 0; col < dt.getFieldCount(); col ++) this.setValueByRow(row_no, dt.getFieldName(col), dt.getValueByRow(row, dt.getFieldName(col))); row_no++; } } this.ImportFromDataItems = function (dataItems) { var oldRowCount = this.MaxRow(); this.AddNewRows(dataItems.length); for (var row = 0; row < dataItems.length; row++) { for (var col = 0; col < this.getFieldCount(); col++) { var row_no = oldRowCount + row; var FieldName = this.getFieldName(col); if (FieldName == "id") continue; if (FieldName == "iGuid") { if (this.SearchFieldName("id") != -1) { this.setValueByRow(row_no, "id", dataItems[row][FieldName]); continue; } } if (typeof dataItems[row][FieldName] !== "undefined") this.setValueByRow(row_no, FieldName, dataItems[row][FieldName]); else this.setValueByRow(row_no, FieldName, ""); } } } this.sort = function (field_name, seq) { var i_name = this.SearchFieldName(field_name); var str_field_type = this.getFieldType(i_name); var new_field_value = new Array(); var sort_list = new Array(); //alert(str_field_type); if (i_name == -1) { alert("no this column [" + field_name + "] in DataTable ..!!"); return (false); } for (var row = 0; row < this.MaxRow(); row++) { var row_data = this._FieldValue[row]; var col_value = row_data[i_name]; if (row == 0) { new_field_value.push(row_data); sort_list.push(col_value); } else { var flg_insert = 0; for (var i = 0; i < sort_list.length; i++) { var new_col_value = sort_list[i]; if (seq == "ASC") switch (str_field_type) { case 'System.Decimal': case 'System.Double': case 'System.Int32': try { if (parseFloat(new_col_value) > parseFloat(col_value)) flg_insert = 1; } catch (e) { alert("DataTable Sort parseDouble() error : " + e.Message); return (false); } break; case 'System.String': case 'System.DateTime': case 'System.TimeSpan': case '': default: if (new_col_value > col_value) flg_insert = 1; break; } if (seq == "DESC") switch (str_field_type) { case 'System.Decimal': case 'System.Double': case 'System.Int32': try { if (parseFloat(new_col_value) < parseFloat(col_value)) flg_insert = 1; } catch (e) { alert("DataTable Sort parseDouble error : " + e.Message); return (false); } break; case 'System.String': case 'System.DateTime': case 'System.TimeSpan': case '': default: //default sort by string if (new_col_value < col_value) flg_insert = 1; break; } if (flg_insert == 1) { // insert a row into new_field_value new_field_value.splice(i, 0, row_data); sort_list.splice(i, 0, col_value); break; } } if (flg_insert == 0) { new_field_value.push(row_data); sort_list.push(col_value); } } } this._FieldValue = new_field_value; } this.getOptionList = function (label_name, value_name) { var str = new StringBuilder(); for (var row = 0; row < this.MaxRow(); row++) { var str_label = this.getValueByRow(row, label_name); var str_value = this.getValueByRow(row, value_name); str.Append("\n"); } return (str.ToString()); } this.ShowDataGrid = function() {//debugger; var field_list = new Array(); var i_name = new Array(); var str = new StringBuilder(); if (this.display_field == "") { for (var col = 0; col < this.getFieldCount(); col++) field_list.push(this.getFieldName(col)); } else { field_list = this.display_field.split(","); } for (var col = 0; col < field_list.length; col++) { var i_column = this.SearchFieldName(field_list[col]); i_name.push(i_column); } str.Append("\n"); str.Append("\n"); str.Append("\n"); for (var col = 0; col < i_name.length; col++) { var i_column = i_name[col]; str.Append("\n"); } str.Append("\n"); for (var row = 0; row < this.MaxRow(); row++) { var field_row = this._FieldValue[row]; str.Append("\n"); str.Append("\n") for (var col = 0; col < i_name.length; col++) { var i_column = i_name[col]; var _value = ""; if (i_column != -1) { _value = field_row[i_column]; str.Append("\n"); } } str.Append("\n"); } str.Append("\n
row" + this.getFieldName(i_column) + "
" + row + ""); if (this.flg_show_html == 0) { _value = _value.ReplaceAll("&", "&"); _value = _value.ReplaceAll("<", "<"); _value = _value.ReplaceAll(">", ">"); _value = _value.ReplaceAll("\"", """); if (this.flg_break_line == 1) _value = _value.ReplaceAll("\n", "
"); str.replace("%td_title%", _value.ReplaceAll("
", "\n")); if (_value.length > this.max_col) _value = _value.Left(this.max_col) + "..." } str.Append("\n"); str.Append("\n" + _value); str.Append("\n
"); return (str.ToString()); } this.ExportCSV = function () { var str = new StringBuilder(); var str_title = new StringBuilder(); var str_type = new StringBuilder(); for (var col = 0; col < this.getFieldCount(); col++) { if (col == 0) str_title.Append(this.getFieldName(col)); else str_title.Append("," + this.getFieldName(col)); } str.Append("0," + str_title.ToString()); for (var col = 0; col < this.getFieldCount(); col++) { if (col == 0) str_type.Append(this.getFieldType(col)); else str_type.Append("," + this.getFieldType(col)); } str.Append("\n1," + str_type.ToString()); for (var row = 0; row < this.MaxRow(); row++) { var field_row = this._FieldValue[row]; var str_value = new StringBuilder(); for (var col = 0; col < this.getFieldCount(col); col++) { var _value = field_row[col]; _value = ("" + _value).ReplaceAll(",", "@comma@"); //_value = _value.ReplaceAll("\n", "@vbBrLn@"); //將 DataTable欄位值中的換行字元取代掉 _value = _value.replace(/\r|\n|\r\n/g, "@vbBrLn@"); if (this.getFieldName(col) != "BreakLine") { if (col == 0) str_value.Append(_value); else str_value.Append("," + _value); } } str.Append("\n2," + str_value.ToString()); } return (str.ToString()); } this.ExportSelect = function (str_column_list) { var str = new Array(); var columns = str_column_list.split(","); if (str_column_list == "") columns = this._FieldName; for (var row = 0; row < this.MaxRow(); row++) { if (row != 0) str.push("\nUNION ALL"); str.push("\n-- row=" + row+1); str.push("\nSelect"); for (var col = 0; col < columns.length-1; col++) { var str_name = columns[col]; var str_buf = new Array(); str_buf.push("'" + this.getValueByRow(row, str_name).ReplaceAll("'", "''") + "' As \"" + str_name + "\""); if (col == 0) str.push("\n" + str_buf.join("")); else str.push("\n, " + str_buf.join("")); } } return (str.join("")); } this.get_control_code = function (code) { switch (code) { case "1" : return ("1,0,0,0,0,0,0,0"); case "2" : return ("1,0,1,0,0,0,0,0"); case "3" : return ("1,1,1,0,0,0,0,0"); case "4" : return ("1,1,1,1,0,0,0,0"); break; default: return ("1,1,1,1,1,1,1,1"); } } this.transform = function() { var rows = this.row_list.split(","); var _rows = this.row_list.split(","); var __rows = this.row_list.split(","); var cols = this.col_list.split(","); var datas = this.data_list.split(","); var formats = this.data_format.split("|"); var t_dt = new DataTable(); t_dt.transformed = true; t_dt.data_format = this.data_format; t_dt.col_list = this.col_list; t_dt.data_list = this.data_list; t_dt.row_list = this.row_list; t_dt.data_width = this.data_width; t_dt.data_format_blank_on_zero = this.data_format_blank_on_zero; for (var f = 0; f < rows.length; f++) { _rows[f] = "|||||||||||||||||||||||".substring(0, cols.length) + _rows[f]; __rows[f] = "|||||||||||||||||||||||".substring(0, cols.length) + rows[f]; } t_dt.setFieldName(_rows); for (var row = 0; row < this.MaxRow(); row++) { // step 1. craete row data var values = []; for (var f = 0; f < rows.length; f++) { // var i = this.SearchFieldName(rows[f]); values.push(this.getValueByRow(row, rows[f])); } // 建立 Rows var current_row = this.SearchList(t_dt, __rows, values) if (current_row == -1) { t_dt.AddNewRow(); for (var row2 = 0 ; row2 < rows.length; row2++) { t_dt.setValue(__rows[row2], this.getValueByRow(row, rows[row2])); } } else { t_dt.MoveTo(current_row); } // step 2. craete column data // FieldName var cols_name = ""; for (var f = 0; f < cols.length; f++) { cols_name += this.getValueByRow(row, cols[f]) + ( f == cols.length - 1 ? "" : "|"); } for (var f = 0; f < datas.length; f++) { if (this.control_code != "") { var code = this.get_control_code(this.getValueByRow(row, this.control_code)); codes = code.split(","); if (codes[f] == "0") continue; } colname = cols_name + "|" + datas[f]; var i = t_dt.SearchFieldName(colname); if (i == -1) // 欄位不存在 { t_dt.AddFieldName(colname); t_dt.setValue(colname,this.getValueByRow(row, datas[f]), formats[f]); } else { t_dt.setValue(colname, Arithmetic(t_dt.getValue(colname), "+" , this.getValueByRow(row, datas[f])), formats[f]); } } } return t_dt; } this.ExcelDataCount = function (str_file_name, str_sheet_name) { var objExcel = null; var objWorkBook = null; var objSheet = null; var _max_row = 0; var _max_col = 0; var _value = null; var col = 0, row = 0; var _value = null; var _old_value = null; var _value_template; this.setFieldName(new Array()); this.setFieldType(new Array()); this.setFieldValue(new Array()); try { objExcel = new ActiveXObject("Excel.Application"); } catch (e) { var str_error_msg = "DataTabel.ImportExcel() error : " + "\n 瀏覽器沒有支援 \"Excel.Application\" " + "\n 錯誤訊息:" + e.Message; alert(str_error_msg); objExcel = null; return (false); } try { objWorkBook = objExcel.Workbooks.Open(str_file_name); } catch (e) { var str_error_msg = "DataTabel.ImportExcel() error : " + "\n 檔案名稱:" + str_file_name + "\n 無法開啟檔案" + "\n 錯誤訊息:" + e.Message; alert(str_error_msg); objWorkBook.Close(); objWorkBook = null; objExcel = null; return (false); } try { if (str_sheet_name == ""){ objSheet = objWorkBook.sheets(1); }else{ objSheet = objWorkBook.sheets(str_sheet_name); } } catch (e) { var str_error_msg = "DataTabel.ImportExcel() error : " + "\n 工作表名稱:" + str_sheet_name + "\n 沒有這個工作表" + "\n 錯誤訊息:" + e.Message; alert(str_error_msg); objWorkBook.Close(); objWorkBook = null; objExcel = null; return (false); } var value; var old_value; var old_NumberFormatLocal = objSheet.cells(1,27).NumberFormatLocal; var old_FormulaR1C1 = objSheet.cells(1,27).FormulaR1C1; old_value = objSheet.cells(1,27).value; objSheet.cells(1,27).NumberFormatLocal ="G/通用格式"; objSheet.cells(1,27).FormulaR1C1 = "=COUNTA(A:A)"; objSheet.cells(1,27).FormulaR1C1 = "=COUNTA(C[-25])"; var _count = objSheet.cells(1,27).value; objSheet.cells(1,27) = old_value; objSheet.cells(1,27).NumberFormatLocal = old_NumberFormatLocal; objSheet.cells(1,27).FormulaR1C1 = old_FormulaR1C1; objExcel.Application.DisplayAlerts = false; objWorkBook.Save(); objWorkBook.Close(); objWorkBook = null; objExcel = null; return _count; } /********************************************************************************************** *** 匯出XML資料 *** *********************************************************************************************** *** 參數: *** *********************************************************************************************** *** ◎str_root_name → 起始節點名稱 *** *** ◎str_row_name → 資料列節點名稱 *** *** ◎str_column_list *** *** → 匯出欄位清單 *** *** → 如果要匯出全部欄位 *** *** 只要給空字串即可 *** *** ◎start_row → 匯出起始列 *** *** ◎max_record *** *** → 匯出列數 *** *** → 若匯出列數為 -1 則代表全數匯出 *** *********************************************************************************************** *** 呼叫範例: *** *********************************************************************************************** *** dt.ExportXML("DataSet" *** *** , "DataTable" *** *** , "管理處,管理處2,分公司,分公司2,契約編號,客戶名稱,成約日,開通日,解約日/毀約日,契約現狀況,契約現狀況2,系統別,系統別2" *** , 0 *** *** , 5 *** ***********************************************************************************************/ this.ExportXML = function (str_root_name, str_row_name, str_column_list, start_row, max_record) { var str_root = new StringBuilder(); var str_column = null; var i_column = new Array(); if (str_column_list == "") { for (var col = 0; col < this.getFieldCount(); col++) i_column.push(col); } else { str_column = str_column_list.split(","); for (var col = 0; col < str_column.length; col++) { var i_name = this.SearchFieldName(str_column[col]); if (i_name != -1) i_column.push(i_name); } } str_root.Append("<" + str_root_name + ">"); for (var row = start_row; row < this.MaxRow(); row++) { if (max_record >= 0) { if (row >= (start_row + max_record)) break; } var row_data = this._FieldValue[row]; var str_row = new StringBuilder(); str_row.Append("\n\t<" + str_row_name + ">") for (col = 0; col < i_column.length; col++) { var field_name = this.getFieldName(i_column[col]); var str_col = new StringBuilder(); var _value = row_data[i_column[col]]; try { _value = _value.ReplaceAll("<", "<"); _value = _value.ReplaceAll(">", ">"); _value = _value.ReplaceAll("&", "&"); //_value = _value.ReplaceAll("'", "'"); //_value = _value.ReplaceAll("\"", """); } catch (e) { } str_col.Append("\n\t\t<" + field_name + " xml:space=\"preserve\">" + _value + ""); str_row.Append(str_col.ToString()); } str_row.Append("\n\t") str_root.Append(str_row.ToString()); } str_root.Append("\n"); return (str_root.ToString()); } this.ImportTXT = function (_data_source) { var ForReading = 1 var objFSO = new ActiveXObject("Scripting.FileSystemObject"); var objFile = objFSO.OpenTextFile(_data_source,1); var RowData,EachData,Member; RowData = objFile.ReadAll(); _data_source = RowData var _field_row = _data_source.split("\n"); var _value; var _value_template; var _row_value = new Array(); var _field_name = new Array(); var _field_type = new Array(); //var _result = ""; /* alert("DataTable.ImportCSV()" + "\n 原始資料:" + _data_source ); */ if ( _data_source == "") { this.setFieldName(new Array()); this.setFieldType(new Array()); this.setFieldValue(new Array()); return (false); } for (var row = 0; row < _field_row.length; row++) { _field_row[row] = _field_row[row].replace(/\r|\n|\r\n/g, ""); var _field_col = _field_row[row].split(","); var _col_value = new Array(); var _flg_add_fieldvalue = 0; if (_field_row[row] != "") { for (var col = 0; col < _field_col.length; col++) { _value = _field_col[col]; if (row == 0) { _field_name.push("f" + col); _field_type.push("System.String"); } _flg_add_fieldvalue = 1; _value = _value.ReplaceAll("@comma@", ","); _value = _value.ReplaceAll("@vbBrLn@", "\n"); _col_value.push(_value); } } if (_flg_add_fieldvalue == 1 && _field_row[row] != "" && _field_col.length == _field_name.length) _row_value.push(_col_value); } this.setFieldName(_field_name); this.setFieldType(_field_type); this.setFieldValue(_row_value); } this.ImportXML = function (str_xml_data, str_root_name, str_column_list, start_row, max_record) { var oXML = new XmlParser(); var str_csv_data = ""; // alert (str_xml_data); oXML.root_name = str_root_name; oXML.load_xml(str_xml_data); dt = oXML.getDataTable(); str_csv_data = dt.ExportCSV(); this.ImportCSV(str_csv_data); } this.ImportCSV = function (_data_source) { var _field_row = _data_source.split("\n"); var _value; var _value_template; var _row_value = new Array(); var _field_name = new Array(); var _field_type = new Array(); //var _result = ""; /* alert("DataTable.ImportCSV()" + "\n 原始資料:" + _data_source ); */ if (_data_source == "") { this.setFieldName(new Array()); this.setFieldType(new Array()); this.setFieldValue(new Array()); return (false); } for (var row = 0; row < _field_row.length; row++) { _field_row[row] = _field_row[row].replace(/\r|\n|\r\n/g, "@vbBrLn@"); var _field_col = _field_row[row].split(","); var _col_value = new Array(_field_col.length); var _flg_add_fieldvalue = 0; if (_field_row[row] != "") { for (var col = 1; col < _field_col.length; col++) { _value = _field_col[col]; switch (_field_col[0]) { case "0": _field_name.push(_value); break; case "1": _field_type.push(_value); break; case "2": _flg_add_fieldvalue = 1; if (_value.length > 0) { _value = _value.ReplaceAll("@comma@", ","); _value = _value.ReplaceAll("@vbBrLn@", "\n"); } // _col_value.push(_value); _col_value[col-1] = _value; break; } } } if (_flg_add_fieldvalue == 1 && _field_row[row] != "") _row_value.push(_col_value); } this.setFieldName(_field_name); this.setFieldType(_field_type); this.setFieldValue(_row_value); } this.quick_import_csv = function (_data_source) { var _field_row = _data_source.split("\n"); var _value; var _value_template; var _row_value = new Array(); var _field_name = new Array(); var _field_type = new Array(); //var _result = ""; if (_data_source == "") { this.setFieldName(new Array()); this.setFieldType(new Array()); this.setFieldValue(new Array()); return (false); } for (var row = 0; row < _field_row.length; row++) { var _field_col = _field_row[row].split(","); var _col_value = new Array(); var _flg_add_fieldvalue = 0; for (var col = 0; col < _field_col.length; col++) { _value = _field_col[col]; if (row == 0) { if (_value != "BreakLine") _field_name.push(_value); } else if (row == 1) { if (_field_name[col] != "BreakLine") _field_type.push(_value); } else { _flg_add_fieldvalue = 1; if (_field_name[col] != "BreakLine") { //_value = _value.ReplaceAll("@comma@", ","); //_value = _value.ReplaceAll("@vbBrLn@", "\n"); _col_value.push(_value); } } } if (_flg_add_fieldvalue == 1 && _field_row[row] != "") _row_value.push(_col_value); } this.setFieldName(_field_name); this.setFieldType(_field_type); this.setFieldValue(_row_value); } this.ExcelRows = function (str_title, str_column_list, start_row, max_record) { } /********************************************************************************************** *** 方法名稱:ExportExcel () *** *********************************************************************************************** *** 說明:將DataTable內的表格資料,以Excel檔的格式匯出 *** *** 參數: *** *** str_title 可以設定 Working Sheet 的標題名稱 *** *** str_column_list 匯出的欄位清單(以逗號隔開) *** *** 如果傳入空值,則代表欄位全數匯出 *** *** start_row 匯出起始列(0 代表從第一筆資料開始匯出) *** *** max_record 匯出筆數(-1 代表全數匯出) *** *********************************************************************************************** *** 回傳值: *** *** return (excel); *** *** excel = new ActiveXObject("Excel.Application"); *** *** 匯出的 Excel文件 物件 *** ***********************************************************************************************/ this.ExportExcel = function (str_title, str_column_list, start_row, max_record) { var excel try { excel = new ActiveXObject("Excel.Application"); } catch (e) { alert("您的瀏覽器目前不支援對『Excel』的存取\n,請確認安全性的設定以及是否已經安裝Excel!"); return (false); } try { //建立Excel存取物件 var _max_row, _max_col; var str_column = null; var i_column = new Array(); var cols = [] ; var columnMergeCell = false; if (excel == null) { alert("請先安裝 EXCEL 程式"); return (false); } if (str_column_list == "") { for (var col = 0; col < this._FieldName.length; col++) { i_column.push(col); var _col = this.getFieldName(col).split("|"); if (this.getFieldName(col).indexOf("|") != -1) columnMergeCell = true; cols.push(_col); } } else { str_column = str_column_list.split(","); for (var col = 0; col < str_column.length; col++) { var i_name = this.SearchFieldName(str_column[col]); if (i_name != -1) i_column.push(i_name); } } //alert(i_column.length); //建立存取用的 WorkSheet var wk = excel.workbooks.add(); var sh = null; if (str_title == "") { sh = wk.sheets(1); } else { //新增工作表 sh = wk.sheets.add(); sh = wk.sheets(1); //設定 工作表(Working Sheet) 名稱 sh.name = str_title; } excel.visible=true excel.DisplayAlerts = false; //設定 工作表 字體 sh.Cells.Font.Name = "新細明體"; sh.Cells.Font.Size = 10; //sh.Cells.NumberFormat = "@"; //建立標題列 /* for (var col = 0; col < this.getFieldCount(); col++) sh.cells(1, 1 + col) = this.getFieldName(col); */ // check column head height var col_height = 1; var col_value = ""; var col_cnt = 0; if (this.transformed == true || columnMergeCell ) { col_height = cols[0].length; for (var h = 0; h < col_height; h++) { col_value = cols[0][h]; for (var col = 0; col < i_column.length; col++) { if (cols[col][h].substring(0,1) == "@") // 不合併 { sh.cells(h + 1, col + 1) = cols[col][h].substring(1,cols[col][h].length) } else sh.cells(h + 1, col + 1) = cols[col][h].substring(0,1) == "_" ? "" : cols[col][h]; if (col_value != cols[col][h] && h < col_height - 1 && cols[col][h].substring(0,1) != "@" ) { mergeCell(sh, col_cnt, col - 1, h , h); col_cnt = col; } else sh.cells(h + 1, col + 1).HorizontalAlignment = -4108; // xlCenter col_value = cols[col][h]; } if ( h < col_height - 1) mergeCell(sh, col_cnt, col - 1, h, h ); col_cnt = 0; } } else { for (var col = 0; col < i_column.length; col++) sh.cells(1, 1 + col) = this.getFieldName(i_column[col]); } //建立資料內容 display_row = start_row + col_height - 1; var formats = this.data_format.split("|"); var data_cols = this.data_list.split(","); var data_formats = []; for (var i = 0; i < data_cols.length; i++) { data_formats[data_cols[i]] = formats[i]; } var width = this.data_width.split(","); var data_width_array = []; for (var i = 0; i < data_cols.length; i++) { data_width_array[data_cols[i]] = width[i]; } // 建立 row 合併cell初值 var row_array = this.row_list.split(","); last_row_datas = []; for (var col = 0; col < row_array.length; col++) last_row_datas.push(this.getValueByRow(0, this.getFieldName(col))); last_row_pos = [1 + display_row, 1 + display_row]; // ------------------------------------------------------------------- for (var row = start_row ; row < this.MaxRow(); row++) { if (max_record >= 0) { if (row >= (start_row + max_record)) break; } var data_row = this._FieldValue[row]; for (var col = 0; col < i_column.length; col++) { var str_field_type = this.getFieldType(col); var _buf = i_column[col]; var data_col = data_row[_buf]; if (this.data_width != "" && this.transformed == true && row == this.MaxRow() - 1) { if (typeof data_width_array[cols[col][col_height-1]] != "undefined") sh.Columns(toExcelCol(col) + ":" + toExcelCol(col) ).ColumnWidth = data_width_array[cols[col][col_height-1]]; else sh.Columns(toExcelCol(col) + ":" + toExcelCol(col) ).AutoFit(); } else { if (this.data_width != "" && row == this.MaxRow() - 1) if (typeof width[col] != "undefined") sh.Columns(toExcelCol(col) + ":" + toExcelCol(col) ).ColumnWidth = width[col]; } if (this.data_format != "" && this.transformed == true) { if (typeof data_formats[cols[col][col_height-1]] == "undefined") sh.cells(2 + display_row , 1 + col).NumberFormat = "@"; else sh.cells(2 + display_row , 1 + col).NumberFormat = data_formats[cols[col][col_height-1]]; } else if (this.data_format != "") { if (formats[col] != "") sh.cells(2 + display_row , 1 + col).NumberFormat = formats[col]; else sh.cells(2 + display_row , 1 + col).NumberFormat = "@"; } else { switch (str_field_type) { case 'System.Decimal': case 'System.Double': sh.cells(2 + row, 1 + col).NumberFormat = "0" + getDecimalFormat(data_col); break; case 'System.String': sh.cells(2 + row, 1 + col).NumberFormat = "@"; break; case 'System.DateTime': case 'System.TimeSpan': case '': break; default: break; } } // assign value if ( this.data_format_blank_on_zero == true && data_col == 0) sh.cells(2 + display_row , 1 + col) =""; else sh.cells(2 + display_row , 1 + col) = data_col; this.before_set_cell(sh, sh.cells(2 + display_row , 1 + col), row, col, data_col); // 合併 row if (this.transformed == true && col < row_array.length - 1) { if (last_row_datas[col] != data_col) { mergeCell(sh, col, col, last_row_pos[col], display_row); last_row_pos[col] = display_row + 1; last_row_datas[col] = data_col; } if (row == (this.MaxRow() - 1)) { mergeCell(sh, col, col, last_row_pos[col], display_row + 1); } } } display_row++; } // 合併 row 表頭 if (this.transformed == true || columnMergeCell) { for (var col = 0; col < i_column.length; col++) { last_row = 0; for (var h = 0; h < col_height; h++) { if (h > 0 && cols[col][h] != cols[col][h-1]) { mergeCell(sh, col, col, last_row, h - 1); last_row = h; } } if (last_row != h) mergeCell(sh, col, col, last_row, h - 1); } } if (max_record >= 0) _max_row = max_record; else _max_row = this.MaxRow() - start_row + col_height - 1; _max_col = i_column.length; //計算 var str_select_from = "A1"; var strCycle = "" ; /* var str_select_end = "" + chr(asc("A") + (_max_col-1)) + (1 + _max_row); */ // Edit by posey 2008.09.23 if (parseInt(_max_col/26) >=1 && _max_col % 26 >= 1) strCycle = chr((asc("A")-1) + parseInt(_max_col/26)); var str_select_end = strCycle + chr((asc("A")-1) + (_max_col%26 == 0 ? 26 :_max_col%26 )) + (1 + _max_row); sh.Range(str_select_from + ":" + str_select_end).Select(); if (this.data_width == "") excel.Selection.Columns.AutoFit(); excel.Selection.Borders.LineStyle = 1; excel.Selection.Borders.Weight = 2; excel.Selection.Borders.ColorIndex = -4105; //顯示Excel檔 excel.visible=true //excel.Selection.NumberFormat = "@"; return (excel); } catch (e) { var str_error_msg = "DataTable.ExportExcel() error : " + "\n 錯誤訊息:" + e.Message; alert(str_error_msg); } } this.before_set_cell = function (sh, cell, row, col, data_col) { return (null); } function mergeCell(sh, col1, col2, h1, h2) { sh.Range(toExcelCol(col1) + (h1+1) + ":" + toExcelCol(col2) + (h2+1) ).MergeCells = true; sh.Range(toExcelCol(col1) + (h1+1) + ":" + toExcelCol(col2) + (h2+1) ).HorizontalAlignment = -4108; // xlCenter } function toExcelCol(col) { var strCycle = ""; col += 1; if (parseInt(col / 26) >= 1 && col % 26 >= 1) strCycle = chr((asc("A")-1) + parseInt(col/26)); return (strCycle + chr((asc("A")-1) + ((col%26) == 0 ? 26 : (col%26)))); } function getDecimalFormat(str_number) { var t_decimal = ("" + str_number).split(".") if (t_decimal.length <= 1) return (""); return ("." + "0000000000000000".substring(0, t_decimal[1].length)); } /****************************************************************************************** *** 方法名稱:ImportExcel () *** ******************************************************************************************* *** 說明: 將Excel檔,匯入到DataTable *** ******************************************************************************************* *** 參數: *** *** str_file_name Excel檔案名稱 *** *** str_sheet_name 工作表名稱 *** *** str_end_col 欄位終止名稱 *** *** 以Excel工作表的第一行當做欄位名稱 *** *** str_end_col為設定結束抓取欄位名稱 *** *** (可以空白當作結束抓取,或是其他特殊欄位名稱) *** *** start_row 匯入起始位置 *** *** max_row 匯入Excel時一次要匯入的筆數 *** *** max_row = -1 則代表不抓取任何資料 *** *** name_prefix 欄位名稱加前置字元 *** *******************************************************************************************/ this.ImportExcel = function (str_file_name, str_sheet_name, str_end_col, start_row, max_record, start_col, stop_on_blank_row, name_prefix) { var objExcel = null; var objWorkBook = null; var objSheet = null; var _max_row = 0; var _max_col = 0; var _value = null; var col = 0, row = 0; var _value = null; var _old_value = null; var _value_template; var _row_value = new Array(); var _field_name = new Array(); var _field_type = new Array(); var col_list = new Array(); //var _result = ""; this.setFieldName(new Array()); this.setFieldType(new Array()); this.setFieldValue(new Array()); if (typeof(stop_on_blank_row) == "undefined") { var stop_on_blank_row = true; } if (typeof(name_prefix) == "undefined") { var name_prefix = ""; } try { objExcel = new ActiveXObject("Excel.Application"); } catch (e) { var str_error_msg = "DataTabel.ImportExcel() error : " + "\n 瀏覽器沒有支援 \"Excel.Application\" " + "\n 錯誤訊息:" + e.Message; alert(str_error_msg); objExcel = null; return (false); } try { objWorkBook = objExcel.Workbooks.Open(str_file_name); } catch (e) { var str_error_msg = "DataTabel.ImportExcel() error : " + "\n 檔案名稱:" + str_file_name + "\n 無法開啟檔案" + "\n 錯誤訊息:" + e.Message; alert(str_error_msg); objWorkBook.Close(); objWorkBook = null; objExcel.Application.quit(); objExcel = null; return (false); } try { if (str_sheet_name == "") { objSheet = objWorkBook.sheets(1); } else { //if (isNumeric(str_sheet_name) == false) objSheet = objWorkBook.sheets(str_sheet_name); //else // objSheet = objWorkBook.sheets(parseInt(str_sheet_name, 10)); } } catch (e) { var str_error_msg = "DataTabel.ImportExcel() error : " + "\n 工作表名稱:" + str_sheet_name + "\n 沒有這個工作表" + "\n 錯誤訊息:" + e.Message; alert(str_error_msg); objWorkBook.Close(); objWorkBook = null; objExcel.Application.quit(); objExcel = null; return (false); } try { if (typeof(start_col) != "undefined") col = start_col; else col = 0; do { _value = "" + objSheet.cells(start_row + 1, 1 + col); _value = _value.ReplaceAll(" ", ""); if (_value == "undefined") _value = ""; if (_value == str_end_col) break; if (_value.indexOf("!") == -1) { col_list.push(col); _field_name.push(name_prefix + _value); _field_type.push("System.String"); } else {} col++; } while (_value != str_end_col) } catch (e) { var str_error_msg = "DataTabel.ImportExcel() error : " + "\n 工作表名稱:" + str_sheet_name + "\n 解析欄位清單錯誤:" + "\n 欄位名稱:" + _value + "\n 欄位順序:" + col + "\n 錯誤訊息:" + e.Message; alert(str_error_msg); objWorkBook.Close(); objWorkBook = null; objExcel.Application.quit(); objExcel = null; return (false); } //_max_col = _field_name.length; _max_col = col_list.length; try { row = start_row; do { if (typeof(objSheet.cells(2 + row, 1 + col_list[0]).value) == "date") { t = objSheet.cells(2 + row, 1 + col_list[0]).value; d = new Date(t); _value = d.toFormat("yyyymmdd"); } else _value = "" + objSheet.cells(2 + row, 1 + col_list[0]); if (max_record >= 0) { if (row >= (start_row + max_record)) break; } if (_value != "undefined") { var _col_value = new Array(); for ( col = 0; col < col_list.length; col++) { if (typeof(objSheet.cells(2 + row, 1 + col_list[col]).value) == "date") { t = objSheet.cells(2 + row, 1 + col_list[col]).value; d = new Date(t); _buf = d.toFormat("yyyymmdd"); } else _buf = "" + objSheet.cells(2 + row, 1 + col_list[col]); if (_buf == "undefined") _col_value.push(""); else _col_value.push(_buf); } _row_value.push(_col_value); this.OnImportExcelRow(row); } row++; } while (_value != "undefined" || stop_on_blank_row == false) ; } catch (e) { var str_error_msg = "DataTabel.ImportExcel() error : " + "\n 工作表名稱:" + str_sheet_name + "\n 解析欄位資料列錯誤:" + "\n 欄位名稱:" + _field_name[col] + "\n 列數:" + row + "\n 錯誤訊息:" + e.Message; alert(str_error_msg); objWorkBook.Close(); objWorkBook = null; objExcel.Application.quit(); objExcel = null; return (false); } this.setFieldName(_field_name); this.setFieldType(_field_type); this.setFieldValue(_row_value); objWorkBook.Close(); objWorkBook = null; objExcel.Application.quit(); objExcel = null; }; this.OnImportExcelRow = function (row) { }; this.ImportXMLSchema = function(str_xml_data, str_table_name) { var xmlDom = get_xml_obj(str_xml_data); var table_node = get_xml_node(xmlDom, "xs:element", "name", str_table_name); var column_node = null; var field_name = new Array(); var field_type = new Array(); column_node = table_node.getElementsByTagName("xs:element"); for (var col = 0; col < column_node.length; col++) { var name = column_node.item(col).getAttribute("name"); var type = column_node.item(col).getAttribute("type").toUpperCase(); if (type.indexOf("LONG") != -1 || type.indexOf("INT") != -1) type = "System.Int32"; if (type.indexOf("DOUBLE") != -1) type = "System.Double"; if (type.indexOf("DECIMAL") != -1) type = "System.Decimal"; if (type.indexOf("STRING") != -1) type = "System.String"; field_name.push(name); field_type.push(type); } this.setFieldName(field_name); this.setFieldType(field_type); } this.ImportXMLValue = function (str_xml_data, str_root_name, start_row, max_record) { var xmlDom = null; var str_head = new StringBuilder(); var root_node = null; //根節點 var row_node = null; //列節點 str_xml_data = str_xml_data.ReplaceAll("&", "&"); str_xml_data = str_xml_data.ReplaceAll("&", "&"); try { xmlDom = load_xml(str_xml_data); } catch (e) { alert("DataTable.ImportXML() 發生錯誤" + "\n 錯誤訊息:" + e.Message + "\n XML原始碼:" + str_xml_data ); } //設定根節點 str_root_name (DataSet是使用 → ) root_node = xmlDom.getElementsByTagName(str_root_name); //顯示根節點數量 //alert(root_node.length); //判斷根節點 底下是否有子結點 if ( !root_node.item(0).hasChildNodes ) { //alert("<" + root_node.item(0).nodeName + "> 沒有子節點!"); //alert("DataTable.ImportXML() 沒有資料!"); if (this.MaxRow() == 0) this.AddNewRows(1); return (false); } row_node = root_node.item(0).childNodes; //顯示列節點數量 //alert(row_node.length); this.setFieldValue(new Array()); this.AddNewRows(row_node.length); //return (false); if (start_row > row_node.length) start_row = row_node.length; if ( (start_row + max_record) > row_node.length || max_record == -1) max_record = row_node.length - start_row //alert("start_row = " + start_row + "\n max_record = " + max_record); //根據列節點的數量,一個一個去尋找行節點 for (var row = start_row; row < (start_row + max_record); row++) { if (row_node.item(row).hasChildNodes) { var col_node = row_node.item(row).childNodes; for (var col = 0; col < col_node.length; col++) { var column_name = col_node.item(col).nodeName; var _value = col_node.item(col).text; _value = _value.ReplaceAll("<", "<"); _value = _value.ReplaceAll(">", ">"); _value = _value.ReplaceAll("&", "&"); this.setValueByRow(row, column_name, _value); } } } } this.connect = function (url, element_list, options) { local_cache = false; var _conn = new XmlHttpConnection(""); var obj = null; if (typeof(dialog) != "undefined") { if (dialog == "1") url += "&dialog=1"; } if (element_list != "") url += "&_ele_list=" + element_list; if (!this.cache) url += "&time=" + (new Date()).getTime(); var this_dt = this; if (typeof options != "undefined" ) { if (options != true) { var async_function = function (obj) { if (typeof(obj) == "undefined") { display_error("DataTable.js: connect error!! " + url); return (false); } if (obj.flg_error == 99) { alert (locales[l_key].DataTable.timeout); window.location = "/" + COMPANY_CODE return (false); } if (obj.flg_error == 1) { display_error(obj.msg); return (false); } try { with (obj.property) { this_dt.TotalRowCount = TotalRowCount; // this.ImportCSV(str_csv_data); this_dt.setFieldName(eval(str_xml_data)); this_dt.setFieldType(eval(str_xml_schema)); this_dt.setFieldValue(str_csv_data); this_dt.message = obj.msg; } } catch (e) { } this_dt.AddFieldName("_dirty"); if (typeof(options.MyData) != "undefinded") options.onready(this_dt,options.MyData ) ; else options.onready(this_dt) ; } _conn.async_get_object(url, element_list, options, async_function); return; } } if (/msie/.test(navigator.userAgent.toLowerCase()) || /firefox/.test(navigator.userAgent.toLowerCase())) obj = _conn.get_object(url, element_list, options); else obj = _conn.sync_get_object(url, element_list, options); if (typeof(obj) == "undefined") { display_error("DataTable.js: connect error!! " + url); return (false); } if (obj.flg_error == 1) { display_error(obj.msg); return (false); } if (obj.flg_error == 99) { alert ("連線逾時!"); window.location = "/" + COMPANY_CODE return (false); } try { with (obj.property) { this.TotalRowCount = TotalRowCount; // this.ImportCSV(str_csv_data); this.setFieldName(eval(str_xml_data)); this.setFieldType(eval(str_xml_schema)); this.setFieldValue(str_csv_data); this.message = obj.msg; obj.property = null; delete obj.property; _conn = null; } } catch (e) { } this.AddFieldName("_dirty"); return (""); } this.create = function (field_name, field_type, max_row) {//debugger; if (field_type == null) { field_type = new Array(); for (var i = 0; i < field_name.length; i++) field_type.push("System.String"); } this.setFieldName(field_name); this.setFieldType(field_type); this.AddNewRows(max_row); } this.toArray = function (str_field_name) { var field_list = new Array(); for (var row = 0; row < this.MaxRow(); row++) { var _value = this.getValueByRow(row, str_field_name); field_list.push(_value); } return (field_list); } this.toDataTable = function (NameColumn, ValueColumn) { var field_name = this.toArray(NameColumn); var field_value = this.toArray(ValueColumn); var dt = new DataTable(); dt.create(field_name, null, 1); for (var col = 0; col < field_value.length; col++) { dt.setValue(field_name[col], field_value[col]); } return (dt); } function Arithmetic(arg1,operator,arg2){ var r1,r2,mul,size; try{ r1=arg1.toString().split(".")[1].length; }catch(e){ r1=0; } try{ r2=arg2.toString().split(".")[1].length; }catch(e){ r2=0; } size = Math.max(r1,r2); switch(operator){ case "+": case "-": mul = size; break; case "*": mul = 2 * size; break; case "/": mul = 0; break; } return eval((arg1*Math.pow(10, size)) + operator + (arg2*Math.pow(10, size))) / Math.pow(10, mul); } this.sum = function (fieldName) { var total = 0.0; for (var row = 0; row < this.MaxRow(); row++) { // total +=parseFloat(this.getRowValue(row,fieldName)); total = Arithmetic(total, "+", this.getRowValue(row,fieldName)); } return (total); } this.max = function(fieldName) { var m = "0" ; for (var row = 0; row < this.MaxRow(); row++) { if (m < this.getRowValue(row,fieldName)) m = this.getRowValue(row,fieldName); } return (m); } this.ExportTxt = function (colName,folderName,fileName,sepChar){ if(!folderName || !fileName || !sepChar){ alert("argument undefined") return false; } var objCDL; var objFSO; var objTextFile; var sWriteLine; var ForReading = 1,ForWriting = 2,ForAppending = 8; var _array = new Array(); var _path; //create object try{ objCDL = new ActiveXObject("MSComDlg.CommonDialog"); objCDL.Filter="*.txt"; objCDL.FilterIndex=2; objCDL.MaxFileSize=255; objCDL.ShowSave(); if(objCDL.FileName){ _path=objCDL.FileName + ".txt"; document.getElementById("saveas.path").value=_path; } }catch(e){ //can not create the object; //use default path; } try{ objFSO = new ActiveXObject("Scripting.FileSystemObject"); // if folder is not exist,create it if(!_path){ if(folderName.indexOf("\\") != -1){ _array = folderName.split("\\"); }else{ _array[0] = folderName; } _path = _array[0]; for(var i=1;i<_array.length;i++){ if(_array[i] != ""){ _path += "\\" + _array[i]; if(!objFSO.FolderExists(_path)){ objFSO.CreateFolder(_path); } } } _path += "\\" +fileNam; } objFSO.CreateTextFile(_path,true); objTextFile=objFSO.GetFile(_path).OpenAsTextStream(ForWriting,true); } catch (e){ alert("您的瀏覽器不支援檔案系統物件!"); return false; } //write data to text file try{ if (objFSO == null || objTextFile==null){ alert("您的瀏覽器不支援檔案系統物件!"); return false; } //heading title sWriteLine=""; if(colName){ sWriteLine=colName.replace(/,/g,sepChar); }else{ for (var col = 0; col < this.getFieldCount(); col++){ sWriteLine += this.getFieldName(col) + sepChar; } sWriteLine=sWriteLine.substring(0,sWriteLine.lastIndexOf(sepChar)); } objTextFile.WriteLine(sWriteLine); //writing line by line for (var row = 0; row < this.MaxRow(); row++){ var field_row = this._FieldValue[row]; sWriteLine=""; for (var col = 0; col < this.getFieldCount(col); col++){ var _value = field_row[col]; sWriteLine += _value + sepChar; } sWriteLine=sWriteLine.substring(0,sWriteLine.lastIndexOf(sepChar)); objTextFile.WriteLine(sWriteLine); } objTextFile.Close(); } catch (e){ var sErrMsg = "DataTable.ExportTxt() error : " + "\n 錯誤訊息:" + e.Message; alert(sErrMsg); return false; } return true; } } function XmlParser() { this.root_name = ""; this.row_name = ""; this.str_xml_data = ""; this.str_data_body = ""; this.row_data = null; this.tag_list = null; this.str_result = ""; this.get_max_row = function () {//debugger; return (this.row_data.length); } this.get_field_count = function () { return (this.tag_list.length); } this.getName = function (col) { return (this.tag_list[col]); } this.load_xml = function (str) { this.str_xml_data = str; if (this.root_name == "") this.root_name = this.find_first_tagname(this.str_xml_data) this.str_data_body = this.get_data_body(this.str_xml_data, this.root_name); if (this.row_name == "") this.row_name = this.find_first_tagname(this.str_data_body); //debugger; this.row_data = this.get_data_array(this.str_data_body, this.row_name); this.tag_list = this.get_tag_list(this.row_data[0]); } this.find_first_tagname = function (str) { var i_start = str.indexOf("<"); var i_end = str.indexOf(">", i_start); var str_buf = str.substring(i_start+1, i_end); str_buf = str_buf.ReplaceAll("/", "") str_buf = str_buf.ReplaceAll(" ", "") return (str_buf); } this.get_data_body = function (str, tagname) { var i_start = str.indexOf("<" + tagname + ">"); var i_end = str.indexOf("", i_start); var str_buf = ""; if (str.indexOf("<" + tagname + "/>") != -1 || str.indexOf("<" + tagname + " />") != -1) str_buf = ""; else str_buf = str.substring(i_start + tagname.length+2, i_end); return (str_buf); } this.get_data_array = function (str, tagname) {//debugger; var i_start = 0; var i_end = 0; var str_buf = 0; var row_data = new Array(); try { do { if (str.indexOf("<" + tagname + "/>", i_end) != -1 || str.indexOf("<" + tagname + " />", i_end) != -1) { i_start = str.indexOf("<" + tagname, i_end) i_end = str.indexOf("/>", i_start); str_buf = ""; } else { i_start = str.indexOf("<" + tagname + ">", i_end); if (i_start == -1) break; i_end = str.indexOf("", i_start); if (i_end == -1) break; str_buf = str.substring(i_start + tagname.length+2, i_end); } row_data.push(str_buf); } while (1); } catch (e) {} return (row_data) } this.get_tag_list = function (str) { var i_start = 0; var i_end = 0; var i_end2 = 0; var str_buf = ""; var tag_list = new Array(); var buf = ""; try { do { i_start = str.indexOf("<", i_end); if (i_start == -1) break; i_end = str.indexOf(">", i_start); if (i_end == -1) break; str_buf = str.substring(i_start+1, i_end); tag_list.push(str_buf); } while (1); } catch (e) {} buf = tag_list.join(","); buf = buf.ReplaceAll(" ", ""); buf = buf.ReplaceAll("/", ""); buf = buf.split(","); tag_list = new Array(); for (var i = 0; i < buf.length; i++) { var tag_name = buf[i]; if (tag_list.indexOf(tag_name) == -1) tag_list.push(tag_name); } return (tag_list) } this.getValueByRow = function (row, tagname) { var str = this.row_data[row]; var str_buf = this.get_data_body(str, tagname); str_buf = str_buf.ReplaceAll("<", "<"); str_buf = str_buf.ReplaceAll(">", ">"); str_buf = str_buf.ReplaceAll("&", "&"); return (str_buf); } this.getDataTable = function () {//debugger; var dt = new DataTable(); dt.create(this.tag_list, null, this.get_max_row()); for (var row = 0; row < this.get_max_row(); row++) { var str = this.row_data[row]; for (var col = 0; col < this.get_field_count(); col++) { var tag_name = this.tag_list[col]; var value = this.getValueByRow(row, tag_name); dt.setValueByRow(row, tag_name, value); } } return (dt); } }