如何从正则表达式生成随机文本以填充excel单元格

如何从正则表达式生成随机文本以填充excel单元格,excel,excel-2016,vba,Excel,Excel 2016,Vba,我正在创建大量Excel测试文件,在许多列中使用不同的值 (Windows 7-64位系统(如果相关)) 这些文件将在以后使用其他未知工具导入数据库,所以我只需要准备这些填充了有效数据的文件 每个文件都有不同的列,因此每列需要不同范围的有效字符 我想做什么? 使用接收正则表达式并生成/填充单元格的公式 使用基于该正则表达式的随机字符串,如果可能,请指定 字符串应包含许多字符 类似于此网站的功能包括: 例如:对于下一列,我想用随机文本填充单元格,如下所示: > > ---------

我正在创建大量Excel测试文件,在许多列中使用不同的值

(Windows 7-64位系统(如果相关))

这些文件将在以后使用其他未知工具导入数据库,所以我只需要准备这些填充了有效数据的文件

每个文件都有不同的列,因此每列需要不同范围的有效字符

我想做什么?

使用接收正则表达式并生成/填充单元格的公式 使用基于该正则表达式的随机字符串,如果可能,请指定 字符串应包含许多字符

类似于此网站的功能包括:

例如:对于下一列,我想用随机文本填充单元格,如下所示:

> 
> -------------------------------------------------------------------
> | Name      | Email          | Date  | URL               | Price  |
> -------------------------------------------------------------------
> | AHygsyub  | xyz@uygsh.hyu  | 1956  | http://iadif.jyf  | 245.75 |
> -------------------------------------------------------------------
在公式栏中使用类似的内容:

> =fillCellWith('([a-z]{3,10} ){1,10}')              //For Name column
> =fillCellWith('\d{4}')                             //For Date column
> =fillCellWith(RegexPattern)                        //Etc etc
有人能指导我创建VBA函数来实现这个目的吗

我没有任何VB编程经验,但我可以想象:

Public Function fillCellWith(MyRegex As String) As String
Dim regEx As New RegExp
Dim Rand As String

'Analize the pattern and create random string satisfying the pattern needs to be valid
'Merge all parts and return as a result in Rand


End Function
明白了!使用Java语言+VBA Excel并基于以下链接:

我发现很多库已经基于正则表达式生成了值

我选择了测试。

为什么?我用Javascript库进行了测试,但我发现与VBA一起使用非常复杂,Phyton库不那么复杂,但当我看到一个Java示例时,我非常渴望

我所做的是:

1-从下载generex.jar 1.0.2版及其依赖项

2-使用以下代码创建一个带有主类的Java项目,在我的例子中是regextrovalue

import com.mifmif.common.regex.Generex;

//args[0] receive regex to init Generex Object
public class RegexToValue {
    public static Generex generex;
    public static int attempts = 0;

    public static void main(String[] args) {
        if (args.length > 0) {
            generex = new Generex(args[0]);
        } else {
            generex = new Generex("[0-3]([a-c]|[e-g]{1,2})"); //default init
        }
        generateValue();
    }

    public static void generateValue() {
        try {
            System.out.print(generex.random());
        } catch(Error e) {
            if (attempts <= 3) {
                attempts++;
                generateValue();
            } else {
                System.out.print("Error");
            }
        }
    }
}
#If VBA7 Then
    '64 Bits
    Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
    '32 Bits
    Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Public Function fillCellWith(regxPattern As String)
    Dim prog As Object

    '// pass the program name to java on command line, and pass any arguments after.
    Set prog = CreateObject("WScript.Shell").exec("javaw -jar ""C:\Generex\RegexToValue.jar"" " & regxPattern)
    While prog.Status = 0
        Sleep 1000 '// put thread to sleep for 1 sec.
    Wend
    fillCellWith = prog.StdOut.ReadAll
End Function
8-在单元格中使用如下公式:

=fillCellWith("(blue|red|yellow|green)\.(oak|cedar|willow)\@(yahoo\.co\.uk|google\.com|example\.org)")

9-见results=)

你是说“类似正则表达式的模式”吗?常规正则表达式用于解析,而不是生成字符串。如果你想让我们帮助你构建一个通用函数,它采用正则表达式模式,然后根据该模式生成“随机”字符串,那么这就是需要的一些编码,没有任何迹象表明你已经尝试解决了这个问题,所以。。。推荐工具对SO来说是不合适的。举个例子会很有帮助。请回答您的问题。这个问题归结为您的代码注释:
分析模式并创建满足模式有效性要求的随机字符串
这是一项艰巨的任务。这是一个新颖的想法,你试图做什么,但不会有一个简单的方法来解决它(至少没有我知道的)。事实上如果我必须解决这个问题,我可能会为它下载一个javascript库(因为似乎有一些),用HTML制作一个快速表单来使用它,然后通过VBA浏览我的本地表单。这听起来很有趣,但因为我没有使用VBA的经验,看来我必须研究如何将html与VBA代码连接起来。我看到的另一个选择是使用Kutools,但我不知道它是否对我所需要的有用。我将搜索并尝试解决这个问题。@Antonycx-在我看来,生成与模式匹配的随机文本的方法要比创建“reverse regex”工具简单得多。