62,050
社区成员
发帖
与我相关
我的任务
分享
using excel = Microsoft.Office.Interop.Excel;
要注意,当你在csdn上看到c#操作excel工作簿的代码时,大多数都存在选择方法不当的问题。那会造成你的程序慢几十倍。var app = new excel.Application();
var wk = app.Workbooks.Open(path);
var sh = wk.Worksheets["Sheet3"];
var datas = sh.Range["C5:F14"].Value2;
var target = sh.Range["G10:K19"];
target.ClearContents();
target.Cells[1,0].values = "下面行是复制内容:";
target.Offset[1].Resize[datas.GetLength(0), datas.GetLength(1)].Value2 = datas;
app.DisplayAlerts = false;
wk.Close();
app.Quit();
这里我把一个范围内的所有数据读取到一个 object[,] 二维数组 datas 中,然后在 target 区域中显示(第一行写了标题,然后下一行开始写入二维数组)。
你会发现,非常简单方面。
有些人一个单元格一个单元格地去操作,那样的程序就会非常非常慢慢。
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
//回调函数,只调用了btnQuery的回调
string controlName = Request.Params.Get("__EVENTTARGET");
string eventArgument = Request.Params.Get("__EVENTARGUMENT");
if (controlName == btnQuery.ClientID.ToString() && eventArgument.Trim() != string.Empty)
{
LeadXLS(eventArgument);
BindData();
}
}
if (!Page.IsPostBack)
{
BindEntryYear();
BindData();
}
}
下边是实际导入的函数
protected void LeadXLS(string guid)
{
string phyAddress = MapPath("~/Upload/") + guid + ".xls";
if (System.IO.File.Exists(phyAddress))
{
IList<string> tableList = ExcelHelper.GetExcelTablesName(phyAddress);
if (tableList.Count > 0)
{
DataTable dt = ExcelHelper.GetExcelDataTable(phyAddress, tableList[0].ToString());
if (ValidColumns(dt))
{
ExcelHelper.ResetColumnTypeByString(dt, dt.Columns[0].ColumnName);
ExcelHelper.ResetColumnTypeByString(dt, dt.Columns[1].ColumnName);
Save(dt);
}
else
{
BSUtility.WindowAlert(Page, "alert('列名有误!请查看标准格式!')");
}
}
else
{
BSUtility.WindowAlert(Page, "alert('不是有效的EXCEL文件,请检查!')");
}
//不管成功与否皆删除该EXCEL文件
System.IO.File.Delete(phyAddress);
}
else
BSUtility.WindowAlert(Page, "alert('不是有效的EXCEL文件,请检查!')");
}
//验证是否符合格式
private bool ValidColumns(DataTable dtTemp)
{
if (dtTemp.Columns.Count < 3)
{
return false;
}
else
{
if (dtTemp.Columns[0].ColumnName.ToUpper() == "KSH" &&
dtTemp.Columns[1].ColumnName.ToUpper() == "ZKZH" &&
dtTemp.Columns[2].ColumnName.ToUpper() == "XM")
{
return true;
}
else
return false;
}
}
private void Save(DataTable dtTemp)
{
r_EntryYear entryYear = new r_EntryYear();
string entryYearString = entryYear.GetCurrentEntryYear().EntryYear;
e_Result result = new e_Result();
StringBuilder sb = new StringBuilder();
foreach (DataRow dr in dtTemp.Rows)
{
e_ResultEntity insertEntity = new e_ResultEntity();
insertEntity.EntryYear = entryYearString;
insertEntity.BMH = dr[0].ToString();
insertEntity.ZKZH = dr[1].ToString();
insertEntity.XM = dr[2].ToString();
if (!result.ExamResultInsert(insertEntity))
sb.Append(insertEntity.XM + ",");
}
if (sb.Length > 0)
{
BSUtility.WindowAlert(Page, "alert('导入过程中出现错误,请检查下列考生:" + sb.ToString() + "');");
}
else
BSUtility.WindowAlert(Page, "alert('导入成功!')");
}
<script language="javascript" type="text/javascript">
$(function () {
var guid = '<%=Request["guid"] %>';
var type = '<%=Request["type"] %>';
if (guid == null || guid == "") {
guid = newGuid();
}
if (type != null) {
type = type + '/';
}
$('#file_upload').uploadify({
'swf': '../Uploadify/uploadify.swf', //FLash文件路径
'buttonText': '选择文件', //按钮文本
'uploader': '../UploadHandler.ashx?guid=' + guid, //处理ASHX页面
'formData': { 'folder': 'picture' }, //传参数
'queueID': 'fileQueue', //队列的ID
'queueSizeLimit': 10, //队列最多可上传文件数量,默认为999
'auto': false, //选择文件后是否自动上传,默认为true
'multi': false, //是否为多选,默认为true
'removeCompleted': true, //是否完成后移除序列,默认为true
'fileSizeLimit': '20MB', //单个文件大小,0为无限制,可接受KB,MB,GB等单位的字符串值
'fileTypeDesc': 'xls Files', //文件描述
'fileTypeExts': '*.xls', //上传的文件后缀过滤器
'onQueueComplete': function (event, data) { //所有队列完成后事件
alert("上传成功!下面开始导入!请稍候!");
__doPostBack("<%=btnQuery.ClientID %>", guid);
},
'onUploadError': function (event, queueId, fileObj, errorObj) {
alert(errorObj.type + ":" + errorObj.info);
}
});
});
function newGuid() {
var guid = "";
for (var i = 1; i <= 32; i++) {
var n = Math.floor(Math.random() * 16.0).toString(16);
guid += n;
if ((i == 8) || (i == 12) || (i == 16) || (i == 20))
guid += "-";
}
return guid;
}
</script>