0

我已经搜索了所有内容,但没有人遇到与我相同的问题。

基本上,用户单击 Excel 中的一个单元格,打开我的表单,填写值,单击插入。将这些变量添加到数组中的程序,然后 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);
        }
    }
4

3 回答 3

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;

}

当然要感谢GrahamGetColumnLetter方法,这是我见过的最天才的方法!

于 2012-09-30T19:42:25.973 回答
0

你不需要一个循环。

如果arr是一个数组,那么

ActiveCell.Resize(, UBound(arr) - LBound(arr) + 1).Value = arr
于 2012-09-30T19:07:48.923 回答
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
于 2012-09-30T19:12:25.280 回答