- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
看一下下面的代码。基本上,这是一个被调用的函数,用于识别工作表的使用范围、循环该范围并散列社会安全号码。
问题就在这里。如果我创建一个电子表格并填充一个单元格,该函数不会对该单元格进行哈希处理。但是,如果我填充多个,它就会起作用。
这可能是UsedRange 属性中的一个错误吗?或者我错过了什么?
非常感谢。
伍迪
try
{
foreach (Excel.Worksheet ws in _excelWorksheet)
{
// Grab the range of numbers that populates the XLS.
Excel.Range range = ws.UsedRange;
// In the following cases, Value2 returns different types:
//
// 1. The range variable points to a single cell:
// Value2 returns a object
//
// 2. The range variable points to many cells:
// Value2 returns object[,]
object[,] values = (object[,])range.Value2;
for (int row = 1; row <= values.GetUpperBound(0); row++)
for (int col = 1; col <= values.GetUpperBound(1); col++)
{
// Convert values to strings.
string value = Convert.ToString(values[row, col]);
// Mask the value that we retrieved and store it in a variable.
switch (_mdOptions.cbobxEncryption.Text)
{
case "MD5":
{
replaceSSN = SHA2Hash.ComputeHash(value, "MD5", null);
break;
}
case "SHA256":
{
replaceSSN = SHA2Hash.ComputeHash(value, "SHA256", null);
break;
}
default:
{
replaceSSN = SHA2Hash.ComputeHash(value, "SHA256", null);
break;
}
}
// Match expressions to sensitive data and replace with the hash
// value.
if (Regex.IsMatch(value, @"\b[0-9]{3}-[0-9]{2}-[0-9]{4}\b"))
{
range.Cells.set_Item(row, col, replaceSSN);
}
else if (Regex.IsMatch(value, @"\b[0-9]{3}[0-9]{2}[0-9]{4}\b"))
{
range.Cells.set_Item(row, col, replaceSSN);
}
}
}
}
catch (Exception)
{
// This is here because of a non-fatal error that we're getting with
// Windows 7 during the hashing phase. Everything still works,
// it's just that this error keeps popping up.
// REVIEW FOR WINDOWS 7 COMPATABILITY
;
//MessageBox.Show("There was a major error. Please restart the program.");
//MessageBox.Show(@"Exception: " + ee);
}
// Pull the hashed password from the registry and add it to the SaveAs
//string saveAsPassword = Convert.ToString(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Mask Data", "Password", ""));
/*
_excelWorkbook.SaveAs("Results.xls",
Type.Missing, Type.Missing, Type.Missing,
Type.Missing, false,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
Type.Missing, true, Type.Missing,
Type.Missing, Type.Missing);
*/
// Report success.
MessageBox.Show("File masked successfully.",
"Mask Data", MessageBoxButtons.OK, MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1,
MessageBoxOptions.DefaultDesktopOnly);
// Shutdown instance of Excel.
//_excelApp.Quit();
// Release memory.
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.ReleaseComObject(_excelWorkbook);
Marshal.ReleaseComObject(_excelApp);
}
最佳答案
您无法将 double 转换为二维对象数组,因为 double 只有一维。如果我告诉你一些你已经知道的事情,但术语“ double ”意味着 double ,并且与二维数组(由 object[,] 定义)无关,我深表歉意。
您可以简单地为这种情况添加一个检查,因此前几行将如下所示:
XLS.Excel.Range range = ws.UsedRange;
object[,] values;
if (range.Value2.GetType().IsArray)
{
values = (object[,])range.Value2;
}
else
{
values = new object[2,2];
values[1,1] = range.Value2;
}
我这台机器上没有 VS,因此代码未经测试,但应该非常接近
编辑:敲出一个快速测试应用程序后,我可以看到UsedRange.Value2正在做什么 - 它返回所有工作表值的数组,这就是为什么如果有超过1个单元格它是一个数组,但是对于一个单元格它只会返回该值值(可以是任何类型)。上面的代码可以工作,但是有点破解。获取行数和列数的正确方法是使用:
range.Rows.Count
和
range.Columns.Count
如果您更改 for 循环以使用这两个值而不是数组边界,它将解决您的问题,并且适用于单行和多行
关于c# - Excel.Interop 的 Worksheet.UsedRange 属性中可能存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295262/
我是 VBA 新手,还无法弄清楚如何立即从工作表中选择和删除“非UsedRange”(即将UsedRange 从单元格A1 开始)。 换句话说,我需要一个动态解决方案来将可变大小的 UsedRange
不知道我错过了什么,但我看到的发布的示例似乎不起作用。 我从网络查询导入数据。我将查询设置为在重新查询时清除未使用的单元格。 我使用此导入的数据生成可变长度的报告。 但是,如果用户(在我的情况下需要这
我有一个 22 行的表,我只想通过 B 列。由于某种原因,我的循环超出了 22 行并达到了 259。 代码 Debug.Print "Starting..." Dim tempRange As Ran
每次使用UsedRange时,我都会遇到问题。我的代码中有这个: Sheets("Campaign").UsedRange 'Refresh UsedRange LastRow = Sheets("C
我使用 Excel.Worksheet 对象的 UsedRange 属性来获取行数和列数。如果我尝试删除列或行,UsedRange 计数应相应减少。但是,经过大量调试,按一定顺序更改列的 Hidden
我正在尝试使用 excel.Interop 将 excel 文件的每张纸转换为图像。到目前为止我所拥有的是 var a = new Microsoft.Office.Interop.Excel.App
我正在使用 UsedRange 属性。 我明白了 Run-time error '91': Object variable or With block variable not set. 我已经在这里
摘要:我从一张表中取出一行数据并将其粘贴到另一张表中,但是该表将是一种日常使用的东西,新数据只是在旧数据下方输入。 问题:在每次新运行时,都会将 7 添加到 UsedRange.Count .例如:一
我需要将 UsedRange 从七个已关闭文件复制到新工作簿。每个源文件大约 200M,因此我想在不打开它们的情况下提取信息。 我从这个网站 https://www.rondebruin.nl/win
尝试编写范围函数的联合 我得到“对象变量或未设置 block ” 我没有做对(我认为): With Rng UnionRange = Intersect(ws.UsedRange, Rng
我正在使用 C# 中的 Excel Office Interop。 (在 VS 2013 中)。我正在使用 Excel 工作簿,该工作簿是在 Office 2010 Professional Plus
我正在使用 Excel-DNA 在 Excel 中开发一些 UDF。从 Excel 传递到我的 UDF 的参数之一是一个范围。当使用特定范围(例如“A1:C50”)时,UDF 可以正常工作。以下是我的
我正在尝试将 excel 电子表格读入内存,但是当我使用 worksheet.UsedRange.Rows.Count 时,返回的值不正确。我的电子表格中有 1670 行数据,但行数返回 694 行。
我需要帮助解决以下问题: 如何通过在 Excel VBA 中指定范围或无限范围而不是使用 UsedRange 来清除单元格填充颜色清除填充颜色? Worksheets("Sheet2").UsedRa
在 VB.NET 中,我想获取使用过的行,所以我写道: Dim objWorksheet As Excel.Worksheet = workbook.Sheets(2) Dim lastRow = o
我用过Cells(1,1).EntireRow.InteriorColor.Color突出显示整行,现在我需要清除 UsedRange 范围之外的所有内容的格式.有没有办法做到这一点? 每当我用谷歌搜
我的工作表上有大约 50 行,我正在使用 VBA 宏对其进行编辑。 当我以以下格式存储最后使用的行时 NewLastRow = ActiveSheet.UsedRange.Rows.Count New
看一下下面的代码。基本上,这是一个被调用的函数,用于识别工作表的使用范围、循环该范围并散列社会安全号码。 问题就在这里。如果我创建一个电子表格并填充一个单元格,该函数不会对该单元格进行哈希处理。但是,
我有一些来自经纪人的输入数据。我编写了一些代码来自动计算、添加列并插入一些公式。 最后,我想做一些条件格式化(影响整行)来确定有利可图的交易(绿色字体整行)和丢失的交易(红色字体整行)。 为此,我使用
ActiveSheet.UsedRange.Columns.Count - 8 在 vba 中意味着什么? vba如何知道usedRange? 最佳答案 这是 UsedRange ( MSDN ref
我是一名优秀的程序员,十分优秀!