读书人

100分vba转换成c#可操作代码路过的都

发布时间: 2012-01-31 21:28:41 作者: rapoo

100分紧急求助vba转换成c#可操作代码,路过的都进来捧个场,谢谢谢谢 !·
Sheet1.Range("A1") = "题名"
Sheet1.Range("B1") = "作者"
Sheet1.Range("C1") = "机构"
Sheet1.Range("D1") = "期刊名"
Sheet1.Range("E1") = "年份"
Sheet1.Range("F1") = "期号"
Sheet1.Range("G1") = "页码"
Sheet1.Range("H1") = "issn"
Sheet1.Range("I1") = "cn"
Sheet1.Range("J1") = "馆藏号"
Sheet1.Range("K1") = "关键字1"
Sheet1.Range("L1") = "关键字2"
Sheet1.Range("M1") = "关键字3"
Sheet1.Range("N1") = "关键字4"
Sheet1.Range("O1") = "关键字5"
Sheet1.Range("P1") = "关键字6"
Sheet1.Range("Q1") = "关键字7"
Sheet1.Range("R1") = "关键字8"
Sheet1.Range("S1") = "关键字9"
Sheet1.Range("T1") = "关键字10"
Sheet1.Range("U1") = "关键字11"
Sheet1.Range("V1") = "关键字12"
Sheet1.Range("W1") = "分类号"
Sheet1.Range("X1") = "文摘"

For sRow = 1 To vLen
If Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【题 名】" Then
vRow = vRow + 1
Sheet1.Range("A" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【作 者】" Then
Sheet1.Range("B" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【机 构】" Then
Sheet1.Range("C" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【刊 名】" Then
Sheet1.Range("D" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 7) = "【ISSN号】" Then
Sheet1.Range("H" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 8)
ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 7) = "【C N 号】" Then
Sheet1.Range("I" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 8)
ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【馆藏号】" Then
Sheet1.Range("J" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【关键词】" Then
Sheet1.Range("K" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【分类号】" Then
Sheet1.Range("W" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
ElseIf Left(Trim(Sheet2.Range("A" & sRow).Text), 5) = "【文 摘】" Then
Sheet1.Range("X" & vRow) = Mid(Trim(Sheet2.Range("A" & sRow).Text), 6)
End If
Next sRow
For vRow = 2 To vLen
sTemp = Sheet1.Cells(vRow, 4)
For j = 4 To 20


iFind = InStr(1, sTemp, qk)
If iFind > 0 Then

Sheet1.Cells(vRow, j) = Mid(sTemp, 1, iFind - 1)
sTemp = Mid(sTemp, iFind + 1)

Else
Sheet1.Cells(vRow, j) = sTemp
Exit For
End If

Next
Next

[解决办法]
可惜不会VB
[解决办法]
进来看看
[解决办法]
public static bool ReadExcelFile(string fileName, out DataTable dt, out string errMessage)
{
errMessage = "";

if (!System.IO.File.Exists(fileName))
{
errMessage = "file doesn't exist.";
return false;
}

Excel.Application xlApp;
Excel.Workbook xlWkb;
Excel.Worksheet xlSht;

xlApp = new Excel.ApplicationClass();
xlApp.DisplayAlerts = false;

try
{
xlWkb = xlApp.Workbooks.Open(fileName);
xlSht = xlWkb.Sheets[0];
}
catch (System.Runtime.InteropServices.COMException cex)
{
errMessage = cex.Message;
xlSht = null;
xlApp.Quit();
xlWkb = null;
xlApp = null;
return false;
}
catch (Exception ex)
{
errMessage = ex.Message;
xlSht = null;
xlApp.Quit();
xlWkb = null;
xlApp = null;
return false;
}


//打开完毕, 开始读数据填充dt
int rowCnt, clmCnt;
rowCnt = xlSht.UsedRange.Rows.Count;
clmCnt = xlSht.UsedRange.Columns.Count;

dt = new DataTable();
DataRow dr;
DataColumn dc;

for (int i = 0; i < clmCnt; i++)
{
dc = new DataColumn();
dt.Columns.Add(dc);
}

for (int i = 1; i <= rowCnt; i++)
{
dr = dt.NewRow();

dr.BeginEdit();
for (int j = 1; j <= clmCnt; j++)
dr[j - 1] = xlSht.Cells[i, j].value;
dr.EndEdit();
dt.Rows.Add(dr);
}

//数据读取完毕, 关闭文件退出
xlSht = null;
xlWkb.Close();
xlApp.Quit();
xlWkb = null;
xlApp = null;

return true;

}





public static bool WriteToExcelFile(string fileName, bool overWriteExists, out DataTable dt, out string errMessage)
{
if (!System.IO.File.Exists(fileName))
{
if (overWriteExists)
{
try
{
System.IO.File.Delete(fileName);
}
catch (Exception ex)
{
errMessage = "can't update exists file.";
errMessage += ": " + ex.Message;
return false;
}
}
else
{
errMessage = "specified file already exists.";
return false;


}
} // end if



Excel.Application xlApp;
Excel.Workbook xlWkb;
Excel.Worksheet xlSht;

xlApp = new Excel.ApplicationClass();
xlWkb = xlApp.Workbooks.Add();
xlSht = xlWkb.Sheets[0];

for (int i = 1; i <= dt.Rows.Count; i++)
for (int j = 1; j <= dt.Columns.Count; j++)
xlSht.Cells[i, j].value = dt.Rows[i - 1][j - 1].ToString();


xlSht = null;
xlWkb.Close();
xlApp.Quit();
xlWkb = null;
xlApp = null;

return true;


}// end function writeexcel


[解决办法]
这两个函数是通用的操作excel 的函数, 不需修改就可以直接用的.
至于你控制各列的细节, 看一下智能感知就知道了, 方法和属性的名称也基本上跟vba 里一样.
我就不再给你写其它的细节代码了.
[解决办法]
楼主可通过C#的程序调用Excel对象的Run方法执行相关vba,这样也许比你把vba转成C#代码,可行性更高一些.我们的经验,很多代码不好实现,而Excel里用vba很好实现的功能,都是通过在excel里录制宏,然后在c#里执行的方式实现.Excel.dll是托管对象,所以它的有些功能,是很难一步到位转成C#语句的,但Run方法却是调用vba的接口。

C# code
objExcel.Run("Macro1", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
[解决办法]
4楼的朋友说的很不错,顶一个
[解决办法]
我快没有分了,楼主给小弟多加点分,谢谢
[解决办法]
学习一下

读书人网 >C#

热点推荐