我一直在搜索,但没有人遇到过与我相同的问题。
基本上,用户单击Excel中的单元格,打开表单,填写值,单击插入。将这些变量添加到Array然后Excel读取和放置的程序。
这是我的第一个Office应用程序,所以我在这里完全失明,但这是我的伪代码。
我的解决方案编辑:
static string GetColumnLetter(int columnNumber)
{
var dividend = columnNumber;
var columnName = String.Empty;
while (dividend > 0)
{
var modulo = (dividend - 1) % 26;
columnName = Convert.ToChar(65 + modulo) + columnName;
dividend = ((dividend - modulo) / 26);
}
return columnName;
}
// Insert into Excel
public static void ExcelInsert(string mFunction, string mColor, int mQty, string mFau, string mPrice)
{
var values = new List<string>
{
mFunction,
mColor,
mQty.ToString(),
mFau,
mPrice
}.ToArray();
var rowNumber = Globals.ThisAddIn.Application.ActiveCell.Row;
var columnNumber = Globals.ThisAddIn.Application.ActiveCell.Column;
var columnLetter = GetColumnLetter(columnNumber);
for (var i = 0; i < values.Count(); i++ )
{
var range = Globals.ThisAddIn.Application.Range[String.Format("{0}{1}", columnLetter, rowNumber)];
range.Value = values[i];
columnNumber++;
columnLetter = GetColumnLetter(columnNumber);
}
}
答案 0 :(得分:2)
我会尝试获取活动单元格的位置,然后向右移动,按照这样的方式一次添加一个值:
using Excel = Microsoft.Office.Interop.Excel;
void MyMethod()
{
//Replace '7' with the number of fields on your Windows Form
int numberOfFields = 7;
string[] array = new string[numberOfFields];
array[0] = textBoxOneValue;
array[1] = textBoxTwoValue;
array[2] = textBoxThreeValue;
array[3] = textBoxFourValue;
array[4] = textBoxFiveValue;
array[5] = textBoxSixValue;
array[6] = textBoxSevenValue;
Excel.Application application = new Excel.Application();
Excel.Workbook workbook = application.Workbooks.Open(@"C:\whatever.xlsx");
Excel.Worksheet worksheet = workbook.ActiveSheet;
Excel.Range activeCell = application.ActiveCell;
int rowNumber = activeCell.Row;
int columnNumber = activeCell.Column;
string columnLetter = GetColumnLetter(columnNumber);
for(int i = 0; i < numberOfFields; i++)
{
Excel.Range range = worksheet.get_Range(String.Format("{0}{1}", columnLetter, rowNumber));
range.Value = array[i];
columnNumber++;
columnLetter = GetColumnLetter(columnNumber);
}
}
string GetColumnLetter()
{
int dividend = columnNumber;
string columnName = String.Empty;
int modulo;
while (dividend > 0)
{
modulo = (dividend - 1) % 26;
columnName = Convert.ToChar(65 + modulo).ToString() + columnName;
dividend = (int)((dividend - modulo) / 26);
}
return columnName;
}
Graham方法当然归功于GetColumnLetter,这是我见过的最天才的事情!
答案 1 :(得分:0)
你不需要循环。
如果arr
是数组,那么
ActiveCell.Resize(, UBound(arr) - LBound(arr) + 1).Value = arr
答案 2 :(得分:0)
这是迭代数组的经典方法
Dim x(3) As String ' your array
x(0) = "abc"
x(1) = "def"
x(2) = "ghi"
x(3) = "jkl"
Dim r As Range ' range to paste
Set r = ActiveCell
For Each s In x
r.Value = s
Set r = r.Offset(,1) ' keep going right
Next
如果你在0号位置没有任何内容,以下内容可能会有所帮助
Dim x(4) As String ' this can actually contain 5 items, from 0 to 4
x(1) = "abc"
x(2) = "def"
x(3) = "ghi"
x(4) = "jkl"
Dim r As Range ' range to paste
Set r = ActiveCell
For i = 1 To UBound(x) ' skip 0
r.Value = x(i)
Set r = r.Offset(, 1) ' keep going right
Next